imooc_hcy
2015-09-25 00:45:14
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);請問,我已經(jīng)把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都是指向函數(shù)的指針嗎,若是為何前者f被清空了之后仍然能用呢?再具體一點的問題,f與factorial都是存儲在棧中的嗎?
5 回答
已采納

Y_du
TA貢獻43條經(jīng)驗 獲得超5個贊
當然有區(qū)別,程序中的東西應該先定義后使用。
var?factorial=f; f=null;
這樣寫就錯了,因為f在沒有被定義的時候就使用了。只是其一,因為這個f沒加()所以它也不是函數(shù)f()
var value=factorial(5); 同樣,這個factorial是個變量,它可以等于任何東西,但是它不可能接受任何參數(shù),var value=factorial(5);也是無效的,也調(diào)用不了f()這個函數(shù)

Kusoku
TA貢獻14條經(jīng)驗 獲得超5個贊
函數(shù)體內(nèi)部調(diào)用自身,這是個遞歸,f=null以后在num*f(num-1)這個地方,此時f不是函數(shù)了,這個調(diào)用表達式執(zhí)行期出錯,你可以把f改成arguments.callee,指向調(diào)用函數(shù)本身,這樣就不會出錯了。

Y_du
TA貢獻43條經(jīng)驗 獲得超5個贊
你這的f與num*f(num-1);一點關系都沒有,num*f(num-1);調(diào)用的是f()這個函數(shù),而不是使用f這個變量。
點擊展開后面1條
添加回答
舉報
0/150
提交
取消