對立即執行函數(IIFE)的理解

最大的作用是創建一個獨立的作用域
用IIFE(匿名函數立即執行)實現,針對不需要復用的功能模塊可以用IIFE完全消除全局變量,所以一般IIFE都是用來輔助命名空間/模塊化方式的

函數表達式后面加上括號可以立即調用該函數,但是函數聲明不可以
例如:function a(){}后直接加()不能實現立即執行 function(){}()(錯誤);
但在function前面加!、+、 -甚至是逗號等到都可以起到函數定義后立即執行的效果,而()、!、+、-、=等運算符,都將函數聲明轉換成函數表達式,消除了javascript引擎識別函數表達式和函數聲明的歧義,告訴javascript引擎這是一個函數表達式,不是函數聲明,可以在后面加括號,并立即執行函數的代碼。
加括號是最安全的做法,因為!、+、-等運算符還會和函數的返回值進行運算,有時造成不必要的麻煩。

Paste_Image.png

原因:
JavaScript引擎規定,如果function關鍵字出現在行首,一律解釋成語句。因此,JavaScript引擎看到行首是function關鍵字之后,認為這一段都是函數的定義,不應該以圓括號結尾,所以就報錯了。
意義
目前看來最大的作用創建一個獨立的作用域,隔離作用域,因為直到ES5為止JS里都只有函數作用域,沒有局部作用域。那么要隔離作用域就只能把代碼用一個函數框起來了,然后用所謂立即執行函數的方式。

補充:還有創建閉包函數

相關參考:

關于JavaScript中立即執行函數的理解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容