摘要:自調用匿名函數打開源碼,首先你會看到這樣的代碼結構這是一個自調用匿名函數。這樣子最大程度防止外界的變量定義對內部造成影響
自調用匿名函數
打開jQuery源碼,首先你會看到這樣的代碼結構:
(function(window,undefined){ //jquery code })(window);
這是一個自調用匿名函數。在第一個括號內,創建一個匿名函數;第二個括號內,立即執行
使用自調用匿名函數的原因傳入參數window的原因通過定義一個匿名函數,創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個js框架必須支持的功能,jQuery被應用在成千上萬的JavaSctipt程序中,必須確保jQuery創建的變量不能和導入他的程序所使用的變量發生沖突
傳入undefined的原因:傳入window:因為執行js代碼是從里到外的,通過傳入window變量,使得window由全局變量變為局部變量,當在jQuery代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;更重要的是,將window作為參數傳入,可以在壓縮代碼時進行優化,例如jQuery-1.6.1.min.js: (function(a,b){})(window);//window被優化為a
(1)Javascript 中的 undefined 并不是作為關鍵字,因此可以允許用戶對其賦值,例如IE8:
var undefined = "change" ;(function(window) { alert(undefined);//IE8 "change" })(window)(2)行參undefined是局部的,所以就算在外部定義了undefined,里面的undefine依然不受影響。這樣子最大程度防止外界的變量定義對內部造成影響
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82440.html
摘要:作用與用法是的內部函數,之前在源碼分析之緩存介紹過一種這樣的數據結構這是一個二維數組,每項中的第一項作為緩存對象的,第二項為緩存的值。 這個世界需要一個特定的惡人,可以供人們指名道姓,千夫所指:全都怪你。——村上春樹《當我談跑步時我談些什么》 本文為讀 lodash 源碼的第六篇,后續文章會更新到這個倉庫中,歡迎 star:pocket-lodash gitbook也會同步倉庫的更新...
摘要:那么為什么要在參數列表中增加呢這樣做也有兩個目的因為有些低版本的瀏覽器中是可以被重新賦值的,在自調用匿名函數的作用域內,確保是真的未定義。 1、命名空間 為什么要使用命名空間? 在一些語言中會看到有命名空間的概念,可在js中并沒有,但是可以通過閉包來實現。在js閉包中定義的變量會被保存到一個作用域且不會污染全局變量,在程序運行完之后也不會被銷毀。 我們可以看到,jQuery的做法就是使...
摘要:介一回,偶們來聊一下用中的類,有些盆友可能用過或者的,知道語法糖,可是在中并沒有,中需要用到構造函數來模擬類。而且要注意一點,構造函數沒有語句,是自動返回。 本回內容介紹 上一回聊到JS的Function類型,做了柯里化,數組去重,排序的題。 介一回,偶們來聊一下用JS中的類,有些盆友可能用過ES6或者TypeScript的,知道Class語法糖,可是在ES5中并沒有,ES5中需要用到...
摘要:在這一節,我們碰到的片段是一組立即運行的匿名函數。匿名函數的調用要調用一個函數,我們必須要有方法定位它,引用它。那么很顯然,沒有任何實現的匿名函數不可能應用了閉包特性。 代碼如下: (function(){ //這里忽略jQuery所有實現 })(); (function(){ //這里忽略jQuery所有實現 })(); 半年前初次接觸jQuery的時候,我也像其他人一樣很興...
摘要:譯立即執行函數表達式處理支持瀏覽器環境微信小程序。學習整體架構,利于打造屬于自己的函數式編程類庫。下一篇文章可能是學習的源碼整體架構。也可以加微信,注明來源,拉您進前端視野交流群。 前言 上一篇文章寫了jQuery整體架構,學習 jQuery 源碼整體架構,打造屬于自己的 js 類庫 雖然看過挺多underscore.js分析類的文章,但總感覺少點什么。這也許就是紙上得來終覺淺,絕知此...
閱讀 1186·2021-11-24 09:38
閱讀 2595·2021-09-27 14:00
閱讀 1151·2019-08-30 15:55
閱讀 1329·2019-08-30 14:16
閱讀 1482·2019-08-30 10:54
閱讀 2857·2019-08-28 17:58
閱讀 750·2019-08-26 13:22
閱讀 1222·2019-08-26 12:01