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