arguments

arguments是一个类数组对象,包含着传入函数中的所有参数。虽然arguments的主要用途是保存函数参数,但是这个对象还有一个名叫callee的属性,该属性是一个指针,指明拥有这个arguments对象的函数。

例子:

function factorial(num){
    if(num<=1){
        return 1
    }else {
        return num * factorial(num-1)
    }
}

上面的代码实现了阶乘函数的递归实现,但是这个函数的执行与函数名factorial紧紧耦合在了一起,如果出现下面这样的情况,就会出问题:

var fn = factorial
factorial = null
fn(10)  // error: factorial is not a function

为了解决这种问题,可以使用arguments的callee属性:

function factorial(num){
    if(num<=1){
        return 1
    }else {
        return num * arguments.callee(num-1)
    }
}

通过使用arguments对象的callee属性,无论引用函数使用的是什么名字,都可以保证正常完成递归调用。


jhhfft
590 声望40 粉丝

Write the Code. Change the World.