WEB开发网
开发学院网页设计JavaScript 深入学习JavaScript中的函数 阅读

深入学习JavaScript中的函数

 2010-09-14 13:04:29 来源:WEB开发网   
核心提示: var sum=function(n){if(1==n)return 1;else return n+sum(n-1);}alert(sum(100));其中函数内部包含了对sum自身的调用,然而对于JavaScript来说,深入学习JavaScript中的函数(7),函数名仅仅是一个变量

var sum=function(n){
   if(1==n)return 1;
   else return n+sum(n-1);
}
alert(sum(100));

其中函数内部包含了对sum自身的调用,然而对于JavaScript来说,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,所以使用arguments.callee属性会是一个较好的办法:

var sum=function(n){
   if(1==n)return 1;
   else return n+arguments.callee(n-1);
}
alert(sum(100));

callee属性并不是arguments不同于数组对象的惟一特征,下面的代码说明了arguments不是由Array类型创建:

Array.prototype.p1=1;
alert(new Array().p1);
function func(){
    alert(arguments.p1);
}
func();

运行代码可以发现,第一个alert语句显示为1,即表示数组对象拥有属性p1,而func调用则显示为“undefined”,即p1不是arguments的属性,由此可见,arguments并不是一个数组对象。

函数的apply、call方法和length属性

JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:

Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);

从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数,都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式:

上一页  2 3 4 5 6 7 8 9  下一页

Tags:深入 学习 JavaScript

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接