arguments.callee的真正意义

2011-05-16 14:49:32 by 【6yang】, 219 visits, 收藏 | 返回

一楼说的很明白了,函数就是一个对象。函数运行需要占用一些资源就像操作系统运行程序程序需要占用一些
资源一样。函数占用的资源就是js解释机分配给它的arguments对象和用来存放局部变量的必包对象,可能不太
确切,因为很有可能arguments对象也是放在必包里边的。建议你看看周爱民的书
var sum = function(n){
  alert(arguments.length);
  alert(sum===arguments.callee);
}
sum(1,2,3);

 

callee  返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,
例如下边示例的递归计算1到n的自然数之和。而该属性  仅当相关函数正在执行时才可用。
还有需要注意的是callee拥有length属性,
这个属性有时候  用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,
由此可以判断调用时形参长度是否和实参长度一致

arguments.length 是实参长度

arguments.callee.length 是形参长度

这里有个简单的例子,是比较参数的长度的:
function test(x,y,z)
{
    checkArgu(arguments);
    return x+y+z;
}

function checkArgu(argu)
{
    var argu_test1, argu_test2;
    argu_test1 = argu.length;
    argu_test2 = argu.callee.length;
    if(argu_test1 == argu_test2)
        alert("yes");
    else
        alert("no");
}

test(1,2,3);
test(1,2,3,4);

 

function factorial(n){/*
    alert(arguments.length);
    alert(arguments.callee.length);*/
    //sum===arguments.callee
  if (n <= 0)
  return 1;
  else
    return n * arguments.callee(n - 1)
}
alert(factorial(3,2));
   
})();

分享到:
share

    图片原图

    loading

    loading