看來,你是無法設置立即調用函數表達式給一個變量:保存到一個立即調用函數的引用
var foo = function() {
alert();
}(); // Immediately alerts
foo(); // Returns "Uncaught TypeError: foo is not a function"
foo
真可謂是不確定的 - 但爲什麼呢?是否有任何方法可以實際保存對立即調用的函數的引用?
看來,你是無法設置立即調用函數表達式給一個變量:保存到一個立即調用函數的引用
var foo = function() {
alert();
}(); // Immediately alerts
foo(); // Returns "Uncaught TypeError: foo is not a function"
foo
真可謂是不確定的 - 但爲什麼呢?是否有任何方法可以實際保存對立即調用的函數的引用?
看來,您無法立即調用函數表達式設置爲一個變量
這是不正確
foo
真可謂是不確定的 - 但爲什麼呢?
您所提供的代碼將IIFE的返回值到foo
。
如果您有:
var foo = function() {
alert();
return 5;
}();
foo
將有5
值。
是否有任何方法可以實際保存對立即調用函數的引用?
是的,但它不是組織代碼的好方法:
var foo;
(foo = function() {
alert('works just fine');
})();
爲什麼你需要立即調用的表達,當你還不如一個函數聲明:
function foo() {
alert();
}
然後調用該功能:
foo();
究竟是什麼 '(foo = function(){ alert('works just nice'); })();' 會幹什麼?它會執行'foo()'還是'function()'? –
你有giv在調用該函數的函數和值的函數之後,en()被分配給變量foo。所以當你試圖在接下來調用它時,它會說未捕獲的類型函數。只要刪除括號。
var foo = function() {
alert();
};
但是,它不再是立即調用的函數表達式(IIFE)。 ;-) – RobG
除了由zzzzBov建議的方法,你也可以做你想使用一個命名函數表達式並返回從函數的引用什麼:
var foo = (function foo() {
alert();
return foo; // Return a reference to this function
}()); // Immediately alerts
foo();
然而如上所述,這似乎不是一個好主意。只需聲明該功能即可。
另外,即使不需要,它也被認爲是包裝IIFE的好形式,所以從一開始就很明顯它是一個IIFE。否則,直到最後一行才能確定。
沒有顯式的return語句,返回'undefined'。 – Sampson