看手册去 JScript语言参考callee 属性 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function 参数是当前正在执行的 Function 对象的名称。 说明 callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。示例 function factorial(n){ if (n <= 0) return 1; else return n * arguments.callee(n - 1) } print(factorial(3));
<script language="javascript">
function factorial(n)
{
if(n <=0)
{
return 1 ;
}
else
{
return n * arguments.callee(n-1);
}
}
alert(factorial(5));//上面的等于下面的
function a(m){
if(m <=0){
return 1 ;
}else{
return m*a(m-1);
}
}
alert(a(5))
//上面的等于下面的
alert(5*(5-1)*(4-1)*(3-1)*(2-1)*1)//这个是关于arguments.callee的例子
function mm(){
alert("m")
return arguments.callee;
}
alert(mm()())
alert("新的mm()")
alert(mm()()())
</script>
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function 参数是当前正在执行的 Function 对象的名称。 说明
callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。示例
function factorial(n){
if (n <= 0)
return 1;
else
return n * arguments.callee(n - 1)
}
print(factorial(3));
指目前被呼叫的函數。看看下面这段:// 我希望 fa 是一个递归的求阶乘的函数.
var fa = function(n) {
if (n <= 0)
return 1;
else
return n * fa(n-1); // 递归调用. 注意这里用的是 fa 函数, 而不是 arguments.callee
};
alert("fa(5) = " + fa(5)); // 结果 120. 正确!// 我希望 fb 跟 fa 一样也是一个递归的求阶乘函数.
var fb = fa;
alert("fb(5) = " + fb(5)); // 结果 120. 也正确!
// 后来,我改了 fa, 希望它完成其它的事情. 但是我没修改 fb.
fa = function(n) { return n * 2; };
alert("fa(5) = " + fa(5)); // 结果 10. 非常正确!// 真 TMD 黑, 刚改完, 又遇到需要求阶乘的东东了, 哦,不怕不怕! 幸亏还有个 fb
alert("fb(5) = " + fb(5));
/**
* 晕死啦, fb(5) 怎么不是 120, 怎么会这样???????
* 哦, 原来我改了 fa, 递归函数中调用的 fa 已经不是函数本身了.
* 早知道我递归的时候就用 arguments.callee 好了. 555
**/