對立即執行函數的理解

立即執行函數使用的目的是:可以避免污染全局變量

某些代碼只需要執行一次,比如只需要顯示一個時間,但是這些代碼也需要一些臨時的變量,但是初始化過程結束之後,就再也不會被用到,如果將這些變量作爲全局變量,不是一個好的主意,我們可以用立即執行函數——去將我們所有的代碼包裹在它的局部作用域中,不會讓任何變量泄露成全局變量,看如下代碼:

在這裏插入圖片描述
比如上面的代碼,如果沒有被包裹在立即執行函數中,而是直接以非函數的形式直接寫在

經常看到這樣的匿名函數代碼,會有很多疑問,今天花時間研究了下

;(function ( $, window, document, undefined ){

//函數體內具體代碼

})(jQuery, window,document);
1.爲什麼要傳入 jQuery

通過定義一個匿名函數,創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個 JS 框架必須支持的功能,jQuery 被應用在成千上萬的 JavaScript 程序中,必須確保 jQuery 創建的變量不能和導入他的程序所使用的變量發生衝突。

2.window,document參數

window, document實參分別接受window, document對象,window, document對象都是全局環境下的,而在函數體內的window, document其實是局部變量,不是全局的window, document對象。這樣做有個好處就是可以提高性能,減少作用域鏈的查詢時間,如果你在函數體內需要多次調用window 或 document對象,這樣把window 或 document對象當作參數傳進去,這樣做是非常有必要的。當然你如果你的插件用不到這兩個對象,那麼就不用傳遞這兩個參數了。

3.undefined

undfined 這個形參我一直不理解,覺得有點多餘,而且這個立即執行函數都沒有傳這個值,後來我在網上看到熱心網友的答案才明白,實參不傳這個參數,是故意讓這個參數爲undefined的。
原因是有的瀏覽器中(IE8)undefined 是可以重新賦值的,這樣寫可以避免函數體內的undefined被外部重寫。

爲什麼我們有時候會看到自執行函數前面有分號";"

因爲自執行函數前面是括號,可能會把括號前面的當成一個函數來執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章