我想調用自我調用功能,但它似乎不工作,因爲你可以看到下面的代碼我能夠警告(測試),但不是當它被另一個函數調用時。請指教 - 謝謝你無法調用自我調用功能
var test = (function(a,b){
return a*b;
})(4,5);
function myFunc() {};
alert(test); // working
alert(test.call(myFunc, 10,5)); // not working
我想調用自我調用功能,但它似乎不工作,因爲你可以看到下面的代碼我能夠警告(測試),但不是當它被另一個函數調用時。請指教 - 謝謝你無法調用自我調用功能
var test = (function(a,b){
return a*b;
})(4,5);
function myFunc() {};
alert(test); // working
alert(test.call(myFunc, 10,5)); // not working
立即調用函數是在加載腳本時執行的函數。在你的榜樣,功能旁邊的測試立即執行,並返回20
值我有一種感覺,你真正想要的是這樣的:
var test = (function()
{
var a = 4,
b = 5;
return function()
{
return a*b;
}
}());
所以在我如上所述,測試不會設置爲20.相反,它將設置爲一個函數,將a
乘以b
並返回20.爲什麼?因爲當我立即調用函數時,它不會返回實際值;它會返回另一個函數,然後該函數返回我試圖計算的實際值。
感謝Kinsho對此進行調查,我認爲您正在使用閉包來簡化我之後的工作。其實我更想理解.call()並試圖調用自調函數,但我認爲這不是正確的方法,因爲它立即計算函數的結果並將其分配給變量Test。 (a,b){ \t return a * b; }; function myFunc(){} alert(test(2,10)); alert(test.call(myFunc,10,5)) – user1336103
您在0線評估功能,並分配返回值「20」至test
。由於20是一個數字,而不是函數,所以不能稱之爲函數。嘗試改爲:
var test = function(a,b){
return a*b;
};
alert(test(4,5));
alert(test(10,5));
謝謝jsha - 我明白了你的觀點。你能否給我一個通過另一個函數調用自調函數的例子代碼,或者這是不可能的。 – user1336103
當函數立即被調用並返回一個基於硬編碼參數的數字時,您希望如何調用**自調用**函數? 'test'包含數字20,因爲它立即被調用。你有沒有理由在這裏使用自我調用功能? – Ian
'test'不是一個函數,因此它沒有'call'方法。 – Yoshi