猿问

javascript较难问题

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都是存储在栈中的吗?

imooc_hcy
浏览 1760回答 5
5回答

Y_du

当然有区别,程序中的东西应该先定义后使用。var factorial=f; f=null;这样写就错了,因为f在没有被定义的时候就使用了。只是其一,因为这个f没加()所以它也不是函数f()var value=factorial(5); 同样,这个factorial是个变量,它可以等于任何东西,但是它不可能接受任何参数,var value=factorial(5);也是无效的,也调用不了f()这个函数

imooc_hcy

此题已经找到答案,谢谢各位的热心!

Kusoku

函数体内部调用自身,这是个递归,f=null以后在num*f(num-1)这个地方,此时f不是函数了,这个调用表达式执行期出错,你可以把f改成arguments.callee,指向调用函数本身,这样就不会出错了。

imooc_hcy

您知道吗?谢谢

Y_du

你这的f与num*f(num-1);一点关系都没有,num*f(num-1);调用的是f()这个函数,而不是使用f这个变量。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答