1.什么是立即執行函數
只有表達式才可以被()符號執行。
在了解立即執行函數之前先明確一下函數聲明、函數表達式及匿名函數的形式,如下圖:
image
接下來看立即執行函數的兩種常見形式:( function(){…} )()和( function (){…} () ),一個是一個匿名函數包裹在一個括號運算符中,后面再跟一個小括號,另一個是一個匿名函數后面跟一個小括號,然后整個包裹在一個括號運算符中,這兩種寫法是等價的。要想立即執行函數能做到立即執行,要注意兩點,一是函數體后面要有小括號(),二是函數體必須是函數表達式而不能是函數聲明。先看下圖:
image
從圖中可以看出,除了使用()運算符之外,!,+,-,=等運算符都能起到立即執行的作用。這些運算符的作用就是將匿名函數或函數聲明轉換為函數表達式,如下圖所示,函數體是函數聲明的形式,使用運算符將其轉換為函數表達式之后就可達到立即執行效果:
image
2.立即執行函數在執行完成后會立即銷毀,例如:
(function test(){
console.log("執行完后立即銷毀");
})();
image.png
上圖可以看出test未被找到。
3.使用立即執行函數的好處
通過定義一個匿名函數,創建了一個新的函數作用域,相當于創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞污染全局的命名空間。此時若是想訪問全局對象,將全局對象以參數形式傳進去即可,如jQuery代碼結構:
image
其中window即是全局對象。作用域隔離非常重要,是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery創建的變量不能和導入他的程序所使用的變量發生沖突。