function f(num){
if(num<=1){
return 1;
}else{
return num * arguments.callee(num-1);
}
}
alert(f(5)); //120
这里为什么结果会是120 arguments.callee(num-1);callee指向的是f
那么这个结果不应该是f(num-1) //5-1=4
为什么执行的是5*4*3*2*1 呢 原理是什么
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
https://developer.mozilla.org...
arguments.callee指向当前正在被执行的函数,在这里也就是f因为arguments.callee指向函数本身,因此上面的函数f等价于如下
因此最终的结果自然是120了。
因为是递归
当递归出口条件没达到会一直执行这个函数;
第一次是:5 x arguments.callee(4);
第二次是:5 x 4 x arguments.callee(3);
第三次是:5 x 4 x 3 x arguments.callee(2);
第四次是:5 x 4 x 3 x 2 x arguments.callee(1); //最后达到条件退出了
所以得到的结果是 5x4x3x2x1 = 120;