1. 程式人生 > >使用IIFE(立即執行函數)讓變量私有化

使用IIFE(立即執行函數)讓變量私有化

匿名 log 我們 func 就是 var 私有 出現 sel

今天去看了一個GITHUB上的開源項目,在客戶端JS的腳本編寫的時候,他大量的使用了IIFE
一開始我是懵逼的,不知道這種函數的意義何在,小菜鳥嘛。
後面我去研究了一番。發現了它的主要作用就是:讓變量私有化
這裏給出一個例子:

(function () {
    var foo = "bar";

    // Outputs: "bar"
    console.log(foo);
})();

// ReferenceError: foo is not defined
console.log(foo);

當然,這些是可以使用普通命名函數就能做到的事,憑什麽就要IIFE

那麽我們為什麽還要用IIFE呢?我抱著這個問題,又去實踐了一番,發現了IIFE除了它的主要作用外,還有以下三個優點:

  1. 避免了在全局中使用命名空間。因為IIFE可以用匿名函數直接運行。樓主你可以把foo去掉直接運行。
  2. 使用IIFE是自運行的,而不需要你再次去調用,英文中說的是:self-documenting,。
  3. 普通命名函數,不是立即運行的,你可能會在某個地方錯誤調用它。

然而,現在是ES6的時代了,有了塊級作用域的出現,這種函數的作用已經被let、const替代了,所以能看見他們出現的場景不多了。
但是,知道技術是為什麽設計出來的還是很不錯的。

使用IIFE(立即執行函數)讓變量私有化