JavaScript中的参数对象arguments的callee属性

众所周知,对象arguments的主要用于保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,用于指向拥有该arguments对象的函数。其一个很重要的用途就是降低函数与函数名的耦合程度。还是举例说明吧,请看下面这个非常经典的递归函数。
例1:

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

在上面的这个例子中,如果函数名以后不会变的情况下,这样定义是没有问题的。但问题是这个函数的执行与函数名factorial紧紧耦合在一起。我们先看一个函数名改变的例子。
例2:

var trueFactorial = factorial;
factorial = function(){
return 0;
};

alert(trueFactorial(5));//0
alert(factorial(5));//0

这违背了我们的初衷,我们希望alert(trueFactorial(5));这条语句返回120。为了消除这种紧密耦合的现象,可以向下面这样使用arguments.callee。
例3:

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

修改之后,再执行例2,alert(trueFactorial(5));语句的结果为120,alert(factorial(5));语句的结果为0。即接触了函数体内的代码与函数名的耦合状态之后,trueFactorial()仍然可以正确的计算阶乘。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值