日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解JavaScript中的執(zhí)行上下文及調(diào)用堆棧

瀏覽:127日期:2023-06-05 16:46:16
一、執(zhí)行上下文是什么

代碼運(yùn)行是在一定的環(huán)境之中運(yùn)行的,這個(gè)運(yùn)行環(huán)境我們就成為執(zhí)行環(huán)境,也就是執(zhí)行上下文,按照?qǐng)?zhí)行環(huán)境不同,我們可以分為三類(lèi):

全局執(zhí)行環(huán)境:代碼首次執(zhí)行時(shí)候的默認(rèn)環(huán)境

函數(shù)執(zhí)行環(huán)境:每當(dāng)執(zhí)行流程進(jìn)入到一個(gè)函數(shù)體內(nèi)部的時(shí)候

Eval執(zhí)行環(huán)境:當(dāng)eval函數(shù)內(nèi)部的文本執(zhí)行的時(shí)候

二、執(zhí)行上下文棧是什么

既然是‘棧’,那就得符合‘棧’的特性,即數(shù)據(jù)結(jié)構(gòu)是先進(jìn)后出。下面我們看一段代碼:

function cat(a){ if(a<0){return false; } console.log(’入棧:’+a); cat(a-1); console.log(’出棧:’+a);}cat(3);// 入棧:3// 入棧:2// 入棧:1// 入棧:0// 出棧:0// 出棧:1// 出棧:2// 出棧:3

我們來(lái)分析上面的代碼的執(zhí)行過(guò)程:

①瀏覽器加載時(shí),程序進(jìn)入全局執(zhí)行上下文,將其壓入一個(gè)棧內(nèi)(第一個(gè)進(jìn)入的,所以最底層);該執(zhí)行上下文下只有一個(gè)函數(shù)cat、cat調(diào)用、參數(shù)3;

②程序進(jìn)入cat函數(shù)內(nèi),即進(jìn)入該函數(shù)執(zhí)行上下文,也將其壓入棧內(nèi)(第二個(gè)進(jìn)入的,所以倒數(shù)第二層),因?yàn)閰?shù)為3大于0,繼續(xù)往下執(zhí)行,輸出’入棧:3’;

③程序繼續(xù)執(zhí)行,調(diào)用函數(shù)cat,再次進(jìn)入新的函數(shù)執(zhí)行上下文,繼續(xù)壓入棧內(nèi)(第三個(gè)進(jìn)入,倒數(shù)第三層),參數(shù)為a-1,循環(huán)②步驟;這里,需要注意的是,因?yàn)檎{(diào)用了函數(shù)cat(a-1),導(dǎo)致下一行代碼’出棧:a’(此時(shí)a仍為3),也就是’出棧:3’暫時(shí)擱淺起來(lái),存在棧內(nèi)倒數(shù)第二層

④不斷重復(fù)②③步驟,以次輸出’入棧:2’、’入棧:1’、’入棧:0’;同時(shí)被擱淺的有’出棧:2’(棧內(nèi)倒數(shù)第三層)、’出棧:1(棧內(nèi)倒數(shù)第四層)’、’出棧:0(棧內(nèi)倒數(shù)第五層)’;

⑤按照棧的特性,被擱淺起來(lái)的4個(gè)輸出項(xiàng):以次輸出’入棧:3’、’入棧:2’、’入棧:1’、’入棧:0’;以上就是執(zhí)行上下文棧的具體情況,請(qǐng)大家手動(dòng)代碼練習(xí)一下,相信會(huì)容易理解透徹。

詳解JavaScript中的執(zhí)行上下文及調(diào)用堆棧

三、執(zhí)行上下文棧的過(guò)程細(xì)節(jié)

我們已經(jīng)知道,每次調(diào)用函數(shù)都會(huì)執(zhí)行一個(gè)新的上下文,每個(gè)執(zhí)行上下文都分為兩個(gè)階段:創(chuàng)建階段、執(zhí)行階段創(chuàng)建階段:指的是程序調(diào)用函數(shù),但代碼未執(zhí)行時(shí)的階段;執(zhí)行階段:指的是變量分配、函數(shù)執(zhí)行等代碼執(zhí)行階段;

(一)創(chuàng)建階段

該階段會(huì)調(diào)用函數(shù)數(shù)時(shí),創(chuàng)建一個(gè)執(zhí)行上下文對(duì)象(executionContextObj),該對(duì)象又包含了三個(gè)對(duì)象,分別是作用域鏈對(duì)象(scopeChain)、變量對(duì)象(variableObject,簡(jiǎn)稱(chēng)VO)、this對(duì)象,其中VO包括變量聲明(variable)、函數(shù)聲明(function)、參數(shù)(arguments)等。這三個(gè)對(duì)象分別是在三個(gè)步驟創(chuàng)建的:步驟1:初始化作用域鏈(scopeChain),開(kāi)辟棧內(nèi)存

步驟2:創(chuàng)建參數(shù)、函數(shù)、變量

步驟3:決定上下文的’this’的值

結(jié)合代碼來(lái)進(jìn)一步分析一下上面的步驟:

function cat(name) { var a = ’年年’; var b = function () {}; this.name = name; function c() {console.log(this.name); } c();}cat(’有魚(yú)’);

這段代碼在調(diào)用函數(shù) cat(’有魚(yú)’)時(shí),執(zhí)行上下文是處于 創(chuàng)建階段的,代碼解析為:

cat執(zhí)行上下文對(duì)象 = { scopeChain: { ... },// 1.創(chuàng)建作用域鏈,開(kāi)辟棧內(nèi)存 variableObject: { 2.創(chuàng)建變量對(duì)象arguments: { // 2.1 解析參數(shù) 0: ’有魚(yú)’, length: 1},name: ’有魚(yú)’, // 2.1 解析參數(shù),創(chuàng)建形參名稱(chēng),并進(jìn)行參數(shù)賦值c: function c() // 2.2 找到函數(shù)聲明c,并將c作為屬性,function c作為值a: undefined, // 2.3 找到變量聲明a,初始化為undefined,該階段只看聲明部分,不進(jìn)行賦值b: undefined // 2.3 找到變量聲明b,初始化為undefined,該階段只看聲明部分,不進(jìn)行賦值 }, this: { 3.創(chuàng)建this對(duì)象this:cat(’有魚(yú)’) // 3.1 指向此次調(diào)用的對(duì)象name:undefined // 3.2 對(duì)象屬性name的初始化為undefined }; c() //又進(jìn)入函數(shù)c執(zhí)行上下文,跟cat函數(shù)一樣,暫不展開(kāi) }

通過(guò)代碼解析我們可以得出以下結(jié)論

①三個(gè)步驟順序不能亂②VO步驟內(nèi),先執(zhí)行函數(shù)聲明,再執(zhí)行變量聲明③只有參數(shù)可以在此階段進(jìn)行賦值,變量、函數(shù)都只能聲明

詳解JavaScript中的執(zhí)行上下文及調(diào)用堆棧

(二)執(zhí)行階段

該階段js解釋器執(zhí)行上下文中的函數(shù)代碼,逐行運(yùn)行js代碼,并給變量賦值;還是結(jié)合代碼來(lái)分析:

cat執(zhí)行上下文對(duì)象 = { scopeChain: { ... }, variableObject: { arguments: { 0: ’有魚(yú)’, length: 1},name: ’有魚(yú)’, c: function c(),a: ’年年’, // 變量a進(jìn)行賦值b: function b // 變量b進(jìn)行賦值 }, this: { 3.創(chuàng)建this對(duì)象this:cat(’有魚(yú)’) name:’有魚(yú)’ // 對(duì)象屬性name進(jìn)行賦值 }}

以上就是詳解JavaScript中的執(zhí)行上下文及調(diào)用堆棧的詳細(xì)內(nèi)容,更多關(guān)于JavaScript中的執(zhí)行上下文及調(diào)用堆棧的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产+成+人+亚洲欧洲在线| 国产午夜一区| 久久麻豆视频| 久久99久久久精品欧美| 欧美日韩18| 日本久久一区| 日本va欧美va精品发布| 蜜桃tv一区二区三区| 99热精品久久| 红桃视频亚洲| 综合欧美精品| 视频一区在线播放| 国产亚洲精品久久久久婷婷瑜伽| 欧美日韩国产免费观看| 日韩精品一二区| 欧美天堂一区| 亚洲精品中文字幕99999| 亚洲欧美日本国产| 日本欧美一区二区| 欧美一区精品| 青草国产精品| 国产成人精品一区二区三区在线| 久久精品一区二区三区中文字幕| 美女精品视频在线| 久久精品国产一区二区| 久草免费在线视频| 极品裸体白嫩激情啪啪国产精品| 2023国产精品久久久精品双| 在线一区免费| 日韩欧美三区| 精品国产中文字幕第一页| 久久香蕉精品| 日韩一区二区三区精品| 91九色综合| 精品网站aaa| 国产在线不卡| 日韩av中文字幕一区二区三区| 91在线成人| 亚洲女同av| 亚洲综合电影一区二区三区| 亚洲综合激情在线| 精品久久网站| 亚洲主播在线| 欧美激情视频一区二区三区在线播放| 成人av三级| 蜜臀久久久99精品久久久久久| 亚洲神马久久| 亚洲va久久久噜噜噜久久| 免费一级欧美片在线观看网站| 9999国产精品| 在线亚洲激情| a国产在线视频| 亚洲欧洲一区| 国产精品一区二区av交换| 成人日韩精品| 日日夜夜免费精品| 久久这里只有| 亚洲精华国产欧美| 国产欧美日本| 日韩欧美一区二区三区免费观看| 日韩一区二区免费看| 亚洲精品影视| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 韩日一区二区| 另类小说一区二区三区| 合欧美一区二区三区| 麻豆精品在线观看| 黄色国产精品| 在线亚洲人成| 国产精品香蕉| 中文欧美日韩| 亚洲高清二区| 日本中文字幕一区二区| 久久精品xxxxx| 日韩成人a**站| 日本不卡一区二区三区| 久久亚洲在线| 99精品美女| 免费视频一区二区三区在线观看| 午夜天堂精品久久久久| 国产精品videossex久久发布| 日韩中文字幕av电影| 久久国产日韩| 亚洲三级毛片| 一区二区三区国产在线| 精品亚洲成人| 99精品99| 国产日韩一区| 欧美aa在线观看| 久久精品国产999大香线蕉| 精品中文一区| 红桃视频亚洲| 黄色免费成人| 欧美日本不卡| 天堂va欧美ⅴa亚洲va一国产| 国产高清亚洲| 国产伦乱精品| 成人av动漫在线观看| 日韩中文首页| 日韩精品亚洲一区二区三区免费| 久久香蕉国产| 亚洲国产专区| 国产亚洲精品美女久久| 四虎精品一区二区免费| 国产精品久久久久久久久久10秀| 欧美国产精品| 日韩在线a电影| 亚洲精品一二| 99精品电影| 98精品视频| 婷婷精品在线| 日本aⅴ亚洲精品中文乱码| 日韩不卡免费高清视频| 99视频在线精品国自产拍免费观看| 黄色成人在线网址| 国内不卡的一区二区三区中文字幕| 国模精品一区| 日本不卡不码高清免费观看 | 国产亚洲激情| 夜鲁夜鲁夜鲁视频在线播放| 久久91视频| 国产日韩中文在线中文字幕| 欧美日韩一二三四| 国产精品三级| 亚洲男女自偷自拍| 日韩一区二区三区在线看| 亚洲成人精品| 男人操女人的视频在线观看欧美| 色婷婷色综合| 国产伦精品一区二区三区千人斩| 久久亚洲在线| 欧美日韩激情| 啪啪国产精品| 欧美激情精品| 国产亚洲精品久久久久婷婷瑜伽| 国产精品呻吟| 9色精品在线| 97精品一区| 里番精品3d一二三区| 亚洲免费观看高清完整版在线观| 视频一区视频二区中文字幕| 成人在线丰满少妇av| 婷婷激情久久| 毛片在线网站| 国产亚洲电影| 激情91久久| 日本精品在线中文字幕| 精品亚洲免a| 日韩高清国产一区在线| 日韩影院精彩在线| 国产99久久| 欧美伊人影院| 天堂俺去俺来也www久久婷婷| 美女少妇全过程你懂的久久| 亚洲黄色中文字幕| 国产欧美一级| 国产精品伊人| 国产精品一区二区免费福利视频| 日本少妇精品亚洲第一区| 免费成人网www| 国内精品福利| 国产亚洲激情| 99综合视频| 色婷婷色综合| 日本天堂一区| 亚洲2区在线| 日韩精品一区二区三区中文在线 | 久久av免费| 亚洲乱码视频| 久久最新视频| 亚洲精品激情| 日韩不卡在线观看日韩不卡视频| 午夜精品婷婷| 亚洲精品123区| 欧美午夜三级| 日韩精品一二区| 今天的高清视频免费播放成人| 欧美日韩免费观看视频| 国产精品日本一区二区不卡视频 | 91嫩草精品| 欧美亚洲综合视频| 国产欧美日韩在线观看视频| 欧美视频一区| 国产欧美激情| 国产精品一卡| 亚洲黄色中文字幕| 国产精品成人国产| 欧美日韩激情在线一区二区三区| 视频小说一区二区| 欧美日韩一区二区三区四区在线观看| 成人污污视频| 免费的成人av| 久久激情av| 国产aⅴ精品一区二区三区久久| 国产精品福利在线观看播放| 999久久久亚洲| 亚洲3区在线| 老司机精品视频网| 亚洲狼人精品一区二区三区| 久久99蜜桃|