深刻理解js當即執行函數

JS中當即執行函數的理解

1.匿名函數不能單獨定義,必須進行賦值操做或者當即執行,不然會被JS引擎定義爲語法錯誤html

1 function(){alert(dada);}
2 VM229:1 Uncaught SyntaxError: Unexpected token

2.在函數體後面加括號就能當即調用,這個函數形式必須是函數表達式,不能是函數聲明安全

1 function(){alert(123);}();
2 VM265:1 Uncaught SyntaxError: Unexpected token (

3.能夠在函數前面加符號,或者用括號將函數包住來消除函數聲明框架

1 (function(){alert(123);})();
2 undefined

4.消除函數聲明最安全的作法是加括號,由於運算符號還會和函數的返回值進行運算,形成沒必要要麻煩frontend

5.包住函數表達式的括號能夠括住參數,也能夠不括住,效果是同樣的函數

1 (function(){alert(123);}());
2 undefined

6.當即執行函數的做用:創造一個做用域空間,防止變量衝突或覆蓋spa

深刻理解js當即執行函數

接下來看當即執行函數的兩種常見形式:( function(){…} )()和( function (){…} () ),一個是一個匿名函數包裹在一個括號運算符中,後面再跟一個小括號,另外一個是一個匿名函數後面跟一個小括號,而後整個包裹在一個括號運算符中,這兩種寫法是等價的。要想當即執行函數能作到當即執行,要注意兩點,一是函數體後面要有小括號(),二是函數體必須是函數表達式而不能是函數聲明。先看下圖:htm

從圖中能夠看出,除了使用()運算符以外,!,+,-,=等運算符都能起到當即執行的做用。這些運算符的做用就是將匿名函數或函數聲明轉換爲函數表達式,以下圖所示,函數體是函數聲明的形式,使用運算符將其轉換爲函數表達式以後就可達到當即執行效果:對象

2.使用當即執行函數的好處blog

經過定義一個匿名函數,建立了一個新的函數做用域,至關於建立了一個「私有」的命名空間,該命名空間的變量和方法,不會破壞污染全局的命名空間。此時如果想訪問全局對象,將全局對象以參數形式傳進去便可,如jQuery代碼結構:token

其中window便是全局對象。做用域隔離很是重要,是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery建立的變量不能和導入他的程序所使用的變量發生衝突。

相關文章
相關標籤/搜索