gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

一文聊聊Javascript中的執(zhí)行上下文

本篇文章帶大家聊聊Javascript中的執(zhí)行上下文,分享一個(gè)思考題,通過(guò)對(duì)思考題的分析,想必會(huì)對(duì)執(zhí)行上下文有更加深入的理解。

一文聊聊Javascript中的執(zhí)行上下文

在前面的幾篇文章中,我們深入了解了關(guān)于執(zhí)行上下文的三個(gè)重要成員:變量對(duì)象、作用域鏈和 this ,本篇文章是前四篇文章的的內(nèi)容的集合,聚合分散的知識(shí)點(diǎn),做一個(gè)簡(jiǎn)單的鞏固。不知道有沒(méi)有人是上一篇來(lái)的,我們的上一篇留下了一個(gè)思考題,通過(guò)對(duì)思考題的分析,想必會(huì)對(duì)執(zhí)行上下文有更加深入的理解。

思考題

這里為了稍微將案例復(fù)雜化一點(diǎn),做了一點(diǎn)點(diǎn)修改,但是并沒(méi)有改變?cè)}所考察的點(diǎn)。

function func(value){     getValue = function(){         console.log(value);     };     return this }              function getValue(){     console.log(5); }  Func(1).getValue(); //為什么是1呢?
登錄后復(fù)制

具體執(zhí)行分析

執(zhí)行全局代碼,創(chuàng)建全局執(zhí)行上下文,全局上下文被壓入執(zhí)行上下文棧

ECStack = [ globalContext ];
登錄后復(fù)制

登錄后復(fù)制

初始化全局上下文

globalContext = {     VO: {         func: reference to function func(){},         getValue: reference to function getValue(){}     },     Scope: [globalContext.VO],     this: globalContext.VO //全局上下文 }
登錄后復(fù)制

初始化全局上下文同時(shí)創(chuàng)建了兩個(gè)函數(shù),因此也會(huì)保存他們父級(jí)作用域鏈在他們的內(nèi)部屬性 [[scope]] 內(nèi)

func.[[scope]] = [      globalContext.VO ]; getValue.[[scope]] = [      globalContext.VO ];
登錄后復(fù)制

此時(shí)開(kāi)始執(zhí)行代碼,執(zhí)行到最后的語(yǔ)句時(shí)先執(zhí)行 func 函數(shù),也就創(chuàng)建按步驟 func 函數(shù)執(zhí)行上下文:

  • 復(fù)制函數(shù) [[scope]] 屬性創(chuàng)建作用域鏈

  • 用 arguments 創(chuàng)建活動(dòng)對(duì)象

  • 初始化活動(dòng)對(duì)象

  • 將活動(dòng)對(duì)象壓入 checksfunccope 作用域鏈頂端。

  • 創(chuàng)建this,簡(jiǎn)單分析:MemberExpression 值為func,func是一個(gè)函數(shù)對(duì)象,理所當(dāng)然是一個(gè)Reference ,其中它的 base value 是 EnvironmentRecord ,所以它的 this 值為 ImplicitThisValue(ref),返回值始終是 undefined ,非嚴(yán)格模式下,其值會(huì)被隱式轉(zhuǎn)換為全局對(duì)象。

funcContext = {     AO: {         arguments: { // 數(shù)組             0: 1,             length: 1         }     },     Scope: [AO, globalContext.VO],     this: undefined }
登錄后復(fù)制

可能有人會(huì)有疑問(wèn),func 里的 getValue 呢?,因?yàn)樗](méi)有變量申明,因此他其實(shí)是一個(gè)屬性的賦值操作,在后面運(yùn)行時(shí)才會(huì)被執(zhí)行。

創(chuàng)建函數(shù)執(zhí)行上下文后壓入執(zhí)行上下文棧

    ECStack = [         funcContext,         globalContext     ];
登錄后復(fù)制

函數(shù)開(kāi)始執(zhí)行,此時(shí)就是為什么最后輸出是1的關(guān)鍵了,第一句賦值操作,那么就需要沿著執(zhí)行上下文去找變量 getValue,那么我們就來(lái)看 funcContext 中的作用域,首先找到 funcContext.AO 顯然并不存在 getValue 這一屬性,那么沿著作用域鏈往上找,找到了globalContext.VO ,找到了 getValue ,這時(shí)候就會(huì)給全局作用域下的 getValue 屬性重新賦值,賦的是一個(gè)函數(shù)的傳新版本,也就重新創(chuàng)建了函數(shù)作用域,將這個(gè)全新的 getValue 函數(shù)的父級(jí)作用域鏈保存在它在他們的內(nèi)部屬性 [[scope]] 內(nèi):

getValue .[[scope]] = [ funcContext.AO, globalContext.VO ];
登錄后復(fù)制

然后才繼續(xù)返回 this ,查找 funcContext 的 this ,即返回undefined;func 執(zhí)行上下文出棧

ECStack = [ globalContext ];
登錄后復(fù)制

登錄后復(fù)制

繼續(xù)執(zhí)行Func(1).getValue(),前半部分返回了 undefined ,此時(shí)系統(tǒng)隱式轉(zhuǎn)換為全局變量對(duì)象,從全局變量對(duì)象中找到 getValue 屬性。這時(shí)候我們發(fā)現(xiàn) getValue 早已不是當(dāng)年那個(gè)少年,執(zhí)行全新的 getValue 的函數(shù)執(zhí)行上下文并入棧:

getValueContext = {     AO: {         arguments: { // 數(shù)組             length: 0         }     },     Scope: [ AO, funcContext.AO, globalContext.VO ],     this: undefined } ECStack = [     getValueContext,     globalContext  ];
登錄后復(fù)制

函數(shù)開(kāi)始執(zhí)行,發(fā)現(xiàn)她要輸出 value ,沿著作用域去找,getValueContext.AO 中并沒(méi)有這個(gè)屬性, 繼續(xù)往下找找到 funcContext.AO(注意! ),在形參中 找到了 value 那么就輸出對(duì)樣的值,也就輸出了1。

函數(shù)執(zhí)行完畢,getValueContext 和 globalContext 相繼出棧并銷毀,代碼運(yùn)行完畢。

總結(jié)

本片以一個(gè)簡(jiǎn)單但又不簡(jiǎn)單的示例,將前面的四篇文章串聯(lián)起來(lái),完整地分析了JS代碼執(zhí)行時(shí)執(zhí)行上下文的工作過(guò)程,希望大家對(duì)此能有更深的理解。但是,不知道有沒(méi)有細(xì)心的同學(xué)發(fā)現(xiàn),上面的示例中,執(zhí)行 getValue 函數(shù)的過(guò)程中,由尋找屬性 value的步驟(標(biāo)記位置),那個(gè)時(shí)候 func 函數(shù)明明已經(jīng)執(zhí)行完畢了,他的執(zhí)行上下文已經(jīng)出棧了,為什么還能從他的執(zhí)行上下文中找到 value 屬性呢?這其實(shí)就是閉包產(chǎn)生的原理了,下一篇我們?nèi)匀挥眠@個(gè)示例去學(xué)習(xí)閉包產(chǎn)生的原理。

【推薦學(xué)習(xí):javascript高級(jí)教程】

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
人妻av无码专区| 亚洲美免无码中文字幕在线 | 免费在线观看视频a| 黄色小视频免费网站| 无码日韩人妻精品久久蜜桃| 欧美三级一级片| 成年人在线看片| 男人女人黄一级| 亚洲综合欧美在线| 制服丝袜中文字幕第一页| wwwwxxxx日韩| 中文字幕 欧美日韩| 久久最新免费视频| 人妻少妇精品无码专区二区| av动漫在线看| 污污网站免费观看| 蜜桃视频成人在线观看| 青青草综合在线| 国模无码视频一区二区三区| 亚洲午夜精品久久久久久人妖| 狠狠爱免费视频| 国产永久免费网站| 国产xxxx振车| 一区二区三区视频在线观看免费| 在线观看中文av| 亚洲乱码中文字幕久久孕妇黑人| 中文字幕 91| 免费国产黄色网址| 亚洲国产精品三区| 青青草免费在线视频观看| 欧美成人三级在线视频| 美女在线视频一区二区| 成人在线免费高清视频| 999在线免费视频| 免费人成自慰网站| 国产日韩欧美久久| 国产极品在线视频| 亚洲在线观看网站| 久久久久久久片| 日韩在线观看a| 天天色天天综合网| 亚洲熟妇av一区二区三区| 男插女免费视频| 亚欧激情乱码久久久久久久久| 99热这里只有精品免费| 色综合手机在线| 可以看毛片的网址| 成人在线免费高清视频| 怡红院亚洲色图| 国产xxxxx视频| 三上悠亚久久精品| 激情五月婷婷六月| 99精品一级欧美片免费播放| 欧美午夜aaaaaa免费视频| 男女午夜激情视频| 亚洲 欧美 综合 另类 中字| 在线播放免费视频| 日韩不卡一二三| 五月婷婷六月丁香激情| 99热手机在线| 五月婷婷激情久久| 一区二区xxx| 中文字幕第17页| 亚洲精品www.| 亚洲精品20p| 亚洲av无日韩毛片久久| 污污的视频免费观看| 波多野结衣国产精品| 91视频这里只有精品| av在线网址导航| 亚洲综合20p| 美国av在线播放| 久久久天堂国产精品| 99热久久这里只有精品| 全黄性性激高免费视频| 18禁裸男晨勃露j毛免费观看| 成人免费网站入口| 欧美爱爱视频免费看| 99999精品视频| 91极品尤物在线播放国产| 91免费视频污| 国产1区2区3区中文字幕| 人人妻人人做人人爽| 粉嫩虎白女毛片人体| 91亚洲精品久久久蜜桃借种| 日本丰满少妇黄大片在线观看| 老子影院午夜伦不卡大全| 日韩av黄色网址| 亚洲一级片av| 国产精品无码av在线播放| 在线观看免费视频高清游戏推荐| 国产91色在线观看| 国产成人一区二区三区别| 亚洲乱码国产一区三区| 中文字幕第66页| 国产精品视频一区二区三区四区五区| 浓精h攵女乱爱av| 大陆极品少妇内射aaaaaa| 国产成人无码av在线播放dvd| 毛片毛片毛片毛片毛| 精品无码国模私拍视频| 国产成人美女视频| 日韩欧美视频网站| 一级全黄肉体裸体全过程| 亚洲熟妇av一区二区三区| 影音先锋男人的网站| 黄色成人免费看| 国产免费黄色小视频| 亚洲第一精品区| 亚洲少妇第一页| 久色视频在线播放| 青青在线视频免费观看| 中文字幕 91| 最近免费中文字幕中文高清百度| 男人天堂新网址| www.久久com| 欧美一级免费在线| 成人亚洲精品777777大片| 久久久999免费视频| 女人色极品影院| 一本色道久久88亚洲精品综合| 污污动漫在线观看| 粗暴91大变态调教| 毛片av免费在线观看| 精品这里只有精品| 国产一线二线三线女| 国产精品av免费| 91欧美一区二区三区| 欧美精品 - 色网| 中文字幕在线视频一区二区三区| 少妇一级淫免费播放| 日本不卡一区二区在线观看| 亚洲色图久久久| 777一区二区| 99久久99精品| 特色特色大片在线| 欧美 日韩 国产精品| 国产欧美精品aaaaaa片| 激情五月婷婷六月| 无码 制服 丝袜 国产 另类| av免费看网址| 黄色国产精品视频| 免费看污黄网站| 91手机视频在线| 妞干网在线观看视频| 日韩avxxx| 亚洲黄色小视频在线观看| 欧美特黄aaa| 国产在线视频在线| 国产一区二区视频免费在线观看| 青青草精品视频在线观看| 九九热精品在线播放| 国产精品久久成人免费观看| 激情五月婷婷六月| 性欧美极品xxxx欧美一区二区| 91看片破解版| 成人免费在线网| 91视频免费版污| 丰满人妻一区二区三区53号| 亚洲不卡中文字幕无码| 欧美日韩在线成人| www婷婷av久久久影片| 日韩一级片播放| 中文字幕日韩精品无码内射| 妞干网在线免费视频| 日韩欧美中文视频| 国产精品99久久免费黑人人妻| 九九热99视频| 国产成人无码a区在线观看视频| 日日躁夜夜躁aaaabbbb| 国产小视频免费| 亚洲欧美日韩三级| a在线视频观看| 91精品国产毛片武则天| 日本激情视频在线| 丝袜人妻一区二区三区| 国产一级免费大片| 亚洲精品中文字幕无码蜜桃| 久久天天东北熟女毛茸茸| 色多多视频在线播放| 九色在线视频观看| 超碰超碰超碰超碰超碰| 亚洲一级免费在线观看| 国产97色在线 | 日韩| 美女扒开大腿让男人桶| 国产成人免费高清视频| 日韩精品你懂的| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 日本不卡一区二区在线观看| 一二三四视频社区在线| 国产在线观看欧美| 亚洲黄色网址在线观看| 97超碰成人在线| 日日躁夜夜躁aaaabbbb| 国产精品亚洲二区在线观看| 日韩精品一区二区三区久久| 丁香六月激情婷婷| 欧美视频免费看欧美视频| 大片在线观看网站免费收看| 妞干网这里只有精品|