在js中,function类型实际上是对象,每一个函数都是function类型的一个实例。并且与其它引用类型一样具有属性和方法。
声明
1普通方式
Function sum(num1,num2) { Return num1+num2; }
2使用变量初始化函数
Var sum=function(num1,num2) { Return num1+num2; }
以上两种方式是经常使用的方式。当然还有其它方式,但相比还是以上更优越。
定义函数。为的就是使用方便。这里仅仅对内部属性进行简单了解
函数内部属性
不论什么函数内部,都有两个特殊的对象,arguments 和 this
arguments为数组对象,包括传递的全部參数。this是它所处对象的作用域。
arguments
比如
一个递归的函数调用 Functionsum(num){ If(num<=1){ Return 1; }else{ Return num*box(num-1); } }
对于求和全然没有问题,倘若函数名改动了,那么递归中的函数就会报错了。所以为了解决问题,我们能够使用函数自身的 arguments.callee 解决。
Function sum(num){ If(num<=1){ Return 1; }else{ Return num*arguments.callee(num-1); } }
This使用
先前觉得自己理解的非常到位,可是我看到下面源代码的时候还是有偏差的。
window对象是js中最大的对象。也是最外围的。
全部全局的变量都是window的属性。所以就有
Varcolor='红色的'
Alert(this.color);
Alert(window.color)
两者是同样的结果,这里color为全局变量。所以是window的属性。this代表的就是windows
Window.color='红色的'
Var box={ Color:'蓝色的', sysColor:function(){ Alert(this.color); } } alert(this.color);//此处的this外层是window对象,所以是windowcolor box.sysColor();//box的color
======================================================================
Window.color='红色的' Function sayColor(){ Alert(this.color); //这里是一个动态的this,注意范围的变化 } sayColor(); Var box={ Color:'蓝色的' } Box.sayColor=sayColor; Box.sayColor();//蓝色
以上对this的基本认识,也是最经常使用的范围变换。this代表包围它对象自身。
Call()和apply()方法
表面上他们是对其它函数的调用,可是不要被他们的表象所迷惑了,真实作用是改动函数的作用域
Var color='红色的'; Var box={ Color:'蓝色的'; } Function sayColor(){ Alert(this.color); } saycolor();//红色 sayColor.call(this);//this为window//红色 sayColorcall(box);////蓝色 ;冒充box,作用域就在box对象中
Call,apply的參数为
Apply(对象作用域,參数);
函数的定义,其最后还是为调用,那么调用的类型有哪些呢,
函数调用
1作为函数的返回值
与普通变量一样。
function box(sum,num){ returnsum+num; } function sum(num){ returnnum+10; } varresult=box(sum(10),10); alert(result);
这里我们能够看到输出的结果是30。这里sun返回的是一个详细的数值。
函数当做參数传递
对以上函数进行变型
function box(sum,num){ return sum(num); } function sum(num){ returnnum+10; } var result=box(sum,10); alert(result);
输出为20,还是一个数值。可是这里的參数sum已经不再是一个详细额的数值了,而是一个详细的函数。在box函数中。參数是一个sun函数。
小结:
该内容为funtion的内部的基本属性和方法的认识,js的函数与其它语言的函数是非常相识的,也是源于object类型,期也有this和arguments等參数组。与main函数非常是相识,对照j2ee中的函数以及其它语言的属性也是类型的。如未说明的length,property属性等。
property原型,请參见下篇function介绍