2013-01-21 99 views
0

我想調用自我調用功能,但它似乎不工作,因爲你可以看到下面的代碼我能夠警告(測試),但不是當它被另一個函數調用時。請指教 - 謝謝你無法調用自我調用功能

var test = (function(a,b){ 
     return a*b; 
      })(4,5); 

function myFunc() {}; 

alert(test); // working 
alert(test.call(myFunc, 10,5)); // not working 
+0

當函數立即被調用並返回一個基於硬編碼參數的數字時,您希望如何調用**自調用**函數? 'test'包含數字20,因爲它立即被調用。你有沒有理由在這裏使用自我調用功能? – Ian

+3

'test'不是一個函數,因此它沒有'call'方法。 – Yoshi

回答

0

立即調用函數是在加載腳本時執行的函數。在你的榜樣,功能旁邊的測試立即執行,並返回20

值我有一種感覺,你真正想要的是這樣的:

var test = (function() 
{ 
    var a = 4, 
     b = 5; 

    return function() 
    { 
     return a*b; 
    } 
}()); 

所以在我如上所述,測試不會設置爲20.相反,它將設置爲一個函數,將a乘以b並返回20.爲什麼?因爲當我立即調用函數時,它不會返回實際值;它會返回另一個函數,然後該函數返回我試圖計算的實際值。

+0

感謝Kinsho對此進行調查,我認爲您正在使用閉包來簡化我之後的工作。其實我更想理解.call()並試圖調用自調函數,但我認爲這不是正確的方法,因爲它立即計算函數的結果並將其分配給變量Test。 (a,b){ \t return a * b; }; function myFunc(){} alert(test(2,10)); alert(test.call(myFunc,10,5)) – user1336103

2

您在0線評估功能,並分配返回值「20」至test。由於20是一個數字,而不是函數,所以不能稱之爲函數。嘗試改爲:

var test = function(a,b){ 
    return a*b; 
}; 
alert(test(4,5)); 
alert(test(10,5)); 
+0

謝謝jsha - 我明白了你的觀點。你能否給我一個通過另一個函數調用自調函數的例子代碼,或者這是不可能的。 – user1336103