JS立即執行函式表示式 (IIFE - Immediately Invoked Function Expression) 有幾種常見的寫法,它們的核心思想都是建立一個函式表示式,然後立即執行它。以下是幾種寫法及示例:
1. 使用圓括號包裹函式表示式:
這是最常見的一種寫法,用一對圓括號 ()
包裹函式表示式,然後在末尾新增另一對圓括號 ()
來立即執行它。
(function() {
console.log("Hello from IIFE!");
})();
2. 使用一元運算子:
可以使用一元運算子,例如 !
、+
、-
、~
等,將函式表示式轉換為表示式,然後立即執行。
!function() {
console.log("Hello from IIFE!");
}();
+function() {
console.log("Hello from IIFE!");
}();
-function() {
console.log("Hello from IIFE!");
}();
~function() {
console.log("Hello from IIFE!");
}();
3. 使用void
運算子:
void
運算子會計算表示式並返回 undefined
。
void function() {
console.log("Hello from IIFE!");
}();
帶引數的IIFE:
所有上述寫法都可以傳遞引數給IIFE:
(function(name) {
console.log("Hello, " + name + "!");
})("World"); // 輸出: Hello, World!
!function(a, b) {
console.log(a + b);
}(1, 2); // 輸出: 3
ES6中的箭頭函式:
雖然箭頭函式本身不能直接作為IIFE使用,但是可以將其用圓括號包裹起來實現同樣的效果:
(() => {
console.log("Hello from IIFE using arrow function!");
})();
void (() => {
console.log("Another IIFE with arrow function");
})();
選擇哪種寫法?
雖然以上幾種寫法都能實現相同的功能,但最常見和推薦的寫法是使用圓括號 ()
包裹函式表示式。這種寫法清晰易懂,並且被廣泛接受為IIFE的標準寫法。 使用一元運算子的寫法較為簡潔,但可讀性略遜一籌。
IIFE 的作用:
- 建立私有作用域: IIFE 最主要的作用是建立私有作用域,避免變數汙染全域性名稱空間。在IIFE內部定義的變數和函式不會洩漏到全域性作用域。
- 避免命名衝突: 在多人協作開發時,使用IIFE可以有效避免命名衝突。
- 建立模組: IIFE 可以用來建立模組化的程式碼,將相關的程式碼封裝在一個獨立的單元中。
希望這些例子能幫助你理解JS立即執行函式的各種寫法。