使用IIFE(立即執行函數)讓變量私有化
阿新 • • 發佈:2019-03-28
匿名 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
除了它的主要作用外,還有以下三個優點:
- 避免了在全局中使用命名空間。因為
IIFE
可以用匿名函數直接運行。樓主你可以把foo去掉直接運行。 - 使用IIFE是自運行的,而不需要你再次去調用,英文中說的是:self-documenting,。
- 普通命名函數,不是立即運行的,你可能會在某個地方錯誤調用它。
然而,現在是ES6
的時代了,有了塊級作用域的出現,這種函數的作用已經被let、const
替代了,所以能看見他們出現的場景不多了。
但是,知道技術是為什麽設計出來的還是很不錯的。
使用IIFE(立即執行函數)讓變量私有化