var factorial=(function f(num){
if(num<=1)return 1;
else{
return num*f(num-1);
}
});
f=null;
var value=factorial(5);
document.write(value);请问,我已经把f设为null了,为何还能正常输出。应该如何理解?function f(num){
if(num<=1)return 1;
else{
return num*f(num-1);
}
}
var factorial=f;
f=null;
var value=factorial(5);
document.write(value);请问,f与factorial都是指向函数的指针吗,若是为何前者f被清空了之后仍然能用呢?再具体一点的问题,f与factorial都是存储在栈中的吗?
5 回答
已采纳
Y_du
TA贡献43条经验 获得超5个赞
当然有区别,程序中的东西应该先定义后使用。
var factorial=f; f=null;
这样写就错了,因为f在没有被定义的时候就使用了。只是其一,因为这个f没加()所以它也不是函数f()
var value=factorial(5); 同样,这个factorial是个变量,它可以等于任何东西,但是它不可能接受任何参数,var value=factorial(5);也是无效的,也调用不了f()这个函数
Kusoku
TA贡献14条经验 获得超5个赞
函数体内部调用自身,这是个递归,f=null以后在num*f(num-1)这个地方,此时f不是函数了,这个调用表达式执行期出错,你可以把f改成arguments.callee,指向调用函数本身,这样就不会出错了。
添加回答
举报
0/150
提交
取消