立即函式
立即函式有幾個特點:
- 立刻執行
- 無法在函式外被再次執行
語法
一般的函式是這樣子寫的
1 2 3
| function IIFE(){ console.log('立即函式:簡稱 "IIFE"'); }
|
那立即函式的語法就像這樣 ↓
1 2 3 4 5 6 7 8 9
| (function IIFE(){ console.log('立即函式:簡稱 "IIFE"'); }());
或
(function IIFE(){ console.log('立即函式:簡稱 "IIFE"'); })();
|
如果我們再次把它叫出來會發生什麼事呢?
1 2 3 4
| (function IIFE(){ console.log('立即函式:簡稱 "IIFE"'); }()); IIFE();
|
呈現結果 ↓

因為立即函式無法在函式外被再次執行
立即函式就算不給它名稱也能夠執行,大部分的立即函式都不需要名稱的。
1 2 3 4 5 6 7 8 9
| (function (){ console.log('立即函式:簡稱 "IIFE"'); }());
//把函式內的括號放到外面也能夠執行
(function (){ console.log('把函式內的括號放到外面也能夠執行'); })();
|

立即函式用途
- 限制變數的作用域
1 2 3 4 5
| (function (){ var Ming = '小明'; console.log(Ming); //小明 })(); console.log(Ming); //not defined
|
- 可以帶入參數
1 2 3
| (function (where){ console.log(where) })('小明在此'); // 回傳 '小明在此'
|
- return 後可以帶入變數
1 2 3 4 5 6
| var whereMing = (function (where) { console.log(where) return where; })('小明在此'); // 回傳 '小明在此'
console.log(whereMing); // 回傳 '小明在此'
|
- 立即函式間的傳遞
1 2 3 4 5 6 7 8
| var a = {}; (function (b){ b.name = '小明'; }(a));
(function (c){ console.log(c.name); // 回傳 '小明' }(a));
|