welcome to Cheeto's blog

0%

JavaScript核心篇:立即函式

立即函式

立即函式有幾個特點:

  1. 立刻執行
  2. 無法在函式外被再次執行

語法

一般的函式是這樣子寫的

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. 限制變數的作用域
1
2
3
4
5
(function (){
var Ming = '小明';
console.log(Ming); //小明
})();
console.log(Ming); //not defined
  1. 可以帶入參數
1
2
3
(function (where){
console.log(where)
})('小明在此'); // 回傳 '小明在此'
  1. return 後可以帶入變數
1
2
3
4
5
6
var whereMing = (function (where) {
console.log(where)
return where;
})('小明在此'); // 回傳 '小明在此'

console.log(whereMing); // 回傳 '小明在此'
  1. 立即函式間的傳遞
1
2
3
4
5
6
7
8
var a = {};
(function (b){
b.name = '小明';
}(a));

(function (c){
console.log(c.name); // 回傳 '小明'
}(a));