码迷,mamicode.com
首页 > 其他好文 > 详细

arguments对象的callee属性详解

时间:2015-05-05 18:54:28      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

  在函数内部,有两个特殊的对象:arguments和this。

  argument对象有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。请看下面这个非常经典的阶乘函数。

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

  这种写法的问题在于函数的执行和函数名factorial紧紧耦合在一起。可以像下面这样使用arguments.callee.

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

  在这个重写后的factorial()函数的函数体内,没有再引用函数名factoria。这样,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。例如:

var trueFactorial = factorial;

factorial = function() {
    return 0;
};

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

 

arguments对象的callee属性详解

标签:

原文地址:http://www.cnblogs.com/linxd/p/4479381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!