立即呼叫函式表示式
有時你不希望將函式作為變數訪問/儲存。你可以建立一個立即呼叫的函式表示式(簡稱 IIFE)。這些基本上是自動執行的匿名函式。他們可以訪問周圍的範圍,但是函式本身和任何內部變數都無法從外部訪問。關於 IIFE 的一個重要注意事項是,即使你命名你的函式,IIFE 也不會像標準函式一樣被提升,也不能被它們宣告的函式名稱呼叫。
(function() {
alert("I've run - but can't be run again because I'm immediately invoked at runtime,
leaving behind only the result I generate");
}());
這是編寫 IIFE 的另一種方式。請注意,分號前面的右括號被移動並放在右大括號後面:
(function() {
alert("This is IIFE too.");
})();
你可以輕鬆地將引數傳遞給 IIFE:
(function(message) {
alert(message);
}("Hello World!"));
此外,你可以將值返回到周圍範圍:
var example = (function() {
return 42;
}());
console.log(example); // => 42
如果需要,可以命名 IIFE。雖然不常見,但這種模式有幾個優點,例如提供可用於遞迴的引用,並且可以使除錯更簡單,因為名稱包含在 callstack 中。
(function namedIIFE() {
throw error; // We can now see the error thrown in 'namedIIFE()'
}());
雖然在括號中包裝函式是表示 Javascript 解析器期望表示式的最常用方法,但在已經預期表示式的位置,符號可以更簡潔:
var a = function() { return 42 }();
console.log(a) // => 42
Arrow 版本立即呼叫函式:
Version >= 6
(() => console.log("Hello!"))(); // => Hello!