IIFE 的全名是 immediately-invoked function expression。

是在 JavaScript 中可以立即執行的函式,我個人比較少在實作上去使用到這個技術,但也是重要的概念。

可以立即執行代表著三件事情。

  1. 不需要去命名,既然可以馬上執行了,代表不需要一個名字來在之後呼叫它。
  2. 不需要透過呼叫,如第一點提到的。
  3. 無法在程式外再次執行。

實際上的寫法就是宣告完函數之後就直接執行,使用的方式就像是現在畫面上的圖片,用一個括號把函數括起來後,再接一個。

也可以使用帶參數的方式。

像是這樣:

1
2
3
(function () {
console.log("hi vic");
})();

回到今天的問題,JavaScript 中的 IIFE 還會用得到嗎?

我個人覺得大部分情境下不太需要。

因為我覺得當初設計出 IIFE 的主要目的是在於模擬一個局部的作用域,防止污染,污染的意思是作用域裡面的變數不會影響作用域外面。

因為在 ES6 之前只有 function 的作用域(var),但在 ES6 之後引入’let’跟’const’還有箭頭函式,這些新的特性在某些情況下已經可以取代之前 IIFE 的功能。

雖說如此,但假如有情境是,你可能需要在一段程式碼的某一個區塊執行某一些功能,但不希望這區塊之外的地方的程式碼會再次去引用到這些功能,那在這種時候,IIFE 就能很好滿足這種需求了。