在ECMAScript中,Function(函数)实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。
<script type="text/javascript"> function box(num1, num2) { return num1+ num2; } var box= function(num1, num2) { return num1 + num2; }; var box= new Function('num1', 'num2' ,'return num1 + num2');//更加具体的说明了函数是对象,会导致解析两次代码,尽量少用</script>函数内部属性
在函数内部,有两个特殊的对象:arguments和this。arguments是一个类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数。但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。function box(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num-1);//使用callee来执行自身,防止如果box函数名称改变时,需要改变内部递归函数的民称 }}函数内部另一个特殊对象是this,其行为与Java和C#中的this大致相似。换句话说,this引用的是函数据以执行操作的对象。PS:当在全局作用域中调用函数时,this对象引用的就是window。<script type="text/Javascript"> var name = "person"; var man = { name:"lisong", sayName:function(){ console.log(this.name); } }; man.sayName();//lisong</script>函数属性和方法
ECMAScript中的函数是对象,因此函数也有属性和方法。每个函数都包含两个属性:length和PRototype。其中,length属性表示函数希望接收的命名参数的个数。<script type="text/javascript"> function box(name, age) { alert(name + age); } console.log(box.length);//2</script>prototype是原型对象,其下有两个方法:apply()和call()。这两个方法的用途都在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。<script type="text/javascript"> var name = "person"; function sayName1(age,addr) { console.log(name+":"+age+":"+addr); } sayName1(26,"耒阳");//person:26:耒阳 var box={ name:"lisong", sayName2:function(age,addr){ sayName1.apply(this,[age,addr]); } } box.sayName2(26,"耒阳");//person:26:耒阳 function sayName3(age,addr) { console.log(this.name+":"+age+":"+addr);//this } sayName3(26,"耒阳");//person:26:耒阳 var box={ name:"lisong", sayName4:function(age,addr){ sayName3.apply(this,[age,addr]); } } box.sayName4(26,"耒阳");//lisong:26:耒阳 var box={ name:"lisong", sayName5:function(age,addr){ sayName3.call(this,age,addr);//call与apply唯一的不同即传递参数的方式不同,apply传递的是数组 } } box.sayName5(26,"耒阳");//lisong:26:耒阳</script>
新闻热点
疑难解答