為什麼要有js立即執行函數,存在的意義是什麼?

不太明白為什麼要出現立即執行函數


IIFE最常用的功能顯然是隔離作用域。

ES6之前JS原生又不提供塊級作用域,所以只能用函數作用域模擬了。(這些書里都寫了啊,為什麼不看呢)

還有種常用就是,用IIFE寫惰性載入,因為函數被執行引擎以同步的方式立即執行了,所以當你在之後的代碼訪問這個變數的時候可以直接返回給你計算後的篩選結果了。


瀉藥,請自行搜索 javascript 惰性函數,就不多解釋了,很多博文有詳細介紹。

除了惰性和局部作用域避免污染,廣告,第三方統計需求這種,也是需要自執行的。


謝邀。

正如樓上所說的,主要是用於隔離作用域。

我直接舉例說明吧:

假設我需要把當前時間以 "2015/9/22 0:10:24" 的形式賦給某個變數

var currTime = (function(){
var time = new Date()

var year = time.getFullYear()
var month = time.getMonth()
var date = time.getDate()
var hour = time.getHours()
var min = time.getMinutes()
var sec = time.getSeconds()

return year + "/" + month + "/" + date + " " + hour + ":" + min + ":" + sec
})()

而我使用的這一大串變數並不會影響到外面的作用域中,所以更優雅。


說說我平常常用的地方,跟前面的幾個回答有些類似

1. js中沒有塊級作用域,用來隔離作用域避免污染,或者截斷作用域鏈,避免閉包造成引用變數無法釋放。

2. 利用立即執行特性,返回需要的業務函數或對象,避免每次通過條件判斷來處理。


目前看來最大的作用當然是隔離作用域,因為直到ES5為止JS里都只有函數作用域,沒有局部作用域。那麼要隔離作用域就只能把代碼用一個函數框起來了,然後用所謂立即執行函數的方式。

另一個作用就是和很多以腳本語言出身的語言一樣,JS里沒有入口函數的概念,在現今的模塊化方案成熟穩定之前,立即執行函數也常常用來充當主函數的角色。


因為可以不用寫變數名啊(笑)


寫了篇博客,詳細介紹了IIFE以及為什麼會有IIFE。

【WEB開發】JavaScript中的立即執行函數表達式(IIFE)


因為JavaScript有很多致命缺陷,以致於各類淫才們開發出各種奇技淫巧來補JavaScript設計和歷史遺留問題上的坑。

比如JavaScript中沒有命名空間,而且只有function代碼塊內部可以隔離變數作用域,自調用匿名函數就用來防止變數彌散到全局,以免各種js庫衝突。


隔離作用域


模塊化編程,項目不是一個人寫的;


防止變數全局污染,防止多人協作時衝突,保護自己的代碼不受污染,用這種方式return介面不是很安全?


推薦閱讀:

參加 JSConf CN 2017 是個什麼樣的體驗?
redux的state樹應該如何設計?
為什麼瀏覽器要限制跨域訪問?
我們為什麼需要 React?
已經確定的設計,功能開發測試完了都已經上線了,覺得不滿意,要重新設計開發,在互聯網公司是普遍現象嗎?

TAG:前端開發 | JavaScript |