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

您的位置:首頁技術文章
文章詳情頁

詳解JavaScript中的執行上下文及調用堆棧

瀏覽:121日期:2023-06-05 16:46:16
一、執行上下文是什么

代碼運行是在一定的環境之中運行的,這個運行環境我們就成為執行環境,也就是執行上下文,按照執行環境不同,我們可以分為三類:

全局執行環境:代碼首次執行時候的默認環境

函數執行環境:每當執行流程進入到一個函數體內部的時候

Eval執行環境:當eval函數內部的文本執行的時候

二、執行上下文棧是什么

既然是‘棧’,那就得符合‘棧’的特性,即數據結構是先進后出。下面我們看一段代碼:

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

我們來分析上面的代碼的執行過程:

①瀏覽器加載時,程序進入全局執行上下文,將其壓入一個棧內(第一個進入的,所以最底層);該執行上下文下只有一個函數cat、cat調用、參數3;

②程序進入cat函數內,即進入該函數執行上下文,也將其壓入棧內(第二個進入的,所以倒數第二層),因為參數為3大于0,繼續往下執行,輸出’入棧:3’;

③程序繼續執行,調用函數cat,再次進入新的函數執行上下文,繼續壓入棧內(第三個進入,倒數第三層),參數為a-1,循環②步驟;這里,需要注意的是,因為調用了函數cat(a-1),導致下一行代碼’出棧:a’(此時a仍為3),也就是’出棧:3’暫時擱淺起來,存在棧內倒數第二層

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

⑤按照棧的特性,被擱淺起來的4個輸出項:以次輸出’入棧:3’、’入棧:2’、’入棧:1’、’入棧:0’;以上就是執行上下文棧的具體情況,請大家手動代碼練習一下,相信會容易理解透徹。

詳解JavaScript中的執行上下文及調用堆棧

三、執行上下文棧的過程細節

我們已經知道,每次調用函數都會執行一個新的上下文,每個執行上下文都分為兩個階段:創建階段、執行階段創建階段:指的是程序調用函數,但代碼未執行時的階段;執行階段:指的是變量分配、函數執行等代碼執行階段;

(一)創建階段

該階段會調用函數數時,創建一個執行上下文對象(executionContextObj),該對象又包含了三個對象,分別是作用域鏈對象(scopeChain)、變量對象(variableObject,簡稱VO)、this對象,其中VO包括變量聲明(variable)、函數聲明(function)、參數(arguments)等。這三個對象分別是在三個步驟創建的:步驟1:初始化作用域鏈(scopeChain),開辟棧內存

步驟2:創建參數、函數、變量

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

結合代碼來進一步分析一下上面的步驟:

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

這段代碼在調用函數 cat(’有魚’)時,執行上下文是處于 創建階段的,代碼解析為:

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

通過代碼解析我們可以得出以下結論

①三個步驟順序不能亂②VO步驟內,先執行函數聲明,再執行變量聲明③只有參數可以在此階段進行賦值,變量、函數都只能聲明

詳解JavaScript中的執行上下文及調用堆棧

(二)執行階段

該階段js解釋器執行上下文中的函數代碼,逐行運行js代碼,并給變量賦值;還是結合代碼來分析:

cat執行上下文對象 = { scopeChain: { ... }, variableObject: { arguments: { 0: ’有魚’, length: 1},name: ’有魚’, c: function c(),a: ’年年’, // 變量a進行賦值b: function b // 變量b進行賦值 }, this: { 3.創建this對象this:cat(’有魚’) name:’有魚’ // 對象屬性name進行賦值 }}

以上就是詳解JavaScript中的執行上下文及調用堆棧的詳細內容,更多關于JavaScript中的執行上下文及調用堆棧的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人精品一区二区免费看京| 国产亚洲精品v| 欧美日韩中出| 国产视频一区在线观看一区免费| 国产亚洲精aa在线看| 欧洲激情综合| 亚洲尤物在线| 激情欧美一区二区三区| 天堂√中文最新版在线| 国产精品久久| 亚洲深夜视频| 亚洲精品国产嫩草在线观看 | 久久激情av| 久久亚洲人体| 亚洲一区二区日韩| 久久婷婷丁香| 一区二区三区四区日本视频| 91成人在线精品视频| 国户精品久久久久久久久久久不卡| 日韩毛片网站| 综合一区在线| 在线免费观看亚洲| 一区免费视频| 91亚洲国产| 精品国内亚洲2022精品成人| 欧美日韩1区2区3区| 日本中文字幕一区二区视频| 韩日一区二区三区| 午夜天堂精品久久久久| 国产精品黄色| 国产精品日韩久久久| 国产精品资源| 尤物精品在线| 国产精品毛片视频| 色综合www| 亚洲精品一级二级三级| 欧洲一区二区三区精品| 99国产一区| 日本免费在线视频不卡一不卡二| 粉嫩av一区二区三区四区五区 | 日本午夜精品| 91精品一区二区三区综合| 午夜精品福利影院| 国产99久久| 成人亚洲精品| 亚洲人成精品久久久| 亚洲一级特黄| 国产在线不卡一区二区三区| 日韩激情一区二区| 99视频+国产日韩欧美| 精品视频免费| 国产欧美亚洲一区| 亚洲精品大全| 亚洲精品极品| 中文字幕av一区二区三区四区| 亚洲午夜电影| 神马日本精品| 亚洲国产综合在线看不卡| 理论片午夜视频在线观看| 麻豆91小视频| 欧美日一区二区在线观看| 综合激情五月婷婷| 奶水喷射视频一区| 男女激情视频一区| 欧美亚洲国产一区| 欧美午夜不卡| 亚洲综合五月| 国产日韩高清一区二区三区在线| 911亚洲精品| 国产精品chinese| 国产传媒在线观看| 欧美aa国产视频| 亚洲精品国产偷自在线观看| 丝袜诱惑制服诱惑色一区在线观看| 久久中文字幕av| 日韩精品一区二区三区免费观看| 在线成人动漫av| 日本亚洲最大的色成网站www| 日韩精品1区2区3区| 国产精品久久久久久久久久10秀| 在线亚洲激情| 麻豆网站免费在线观看| 午夜天堂精品久久久久| 色综合五月天| 91嫩草精品| 香蕉国产精品| 国产精品久久久久蜜臀| 免播放器亚洲| 成人免费电影网址| 国产精品一区二区三区四区在线观看 | 国产农村妇女精品一二区| 蜜臀久久99精品久久久画质超高清 | 欧美日中文字幕| 欧美亚洲免费| 一本综合精品| 国产精一区二区| 国产精品av一区二区| 精品国产亚洲一区二区三区大结局| 天堂va蜜桃一区二区三区| 欧美特黄一区| 欧美aa国产视频| 黄色网一区二区| 日本久久一区| 日欧美一区二区| 中文无码日韩欧| 视频在线观看一区| 亚洲欧洲另类| 午夜日韩在线| 玖玖精品视频| 丝袜美腿亚洲一区二区图片| 999久久久精品国产| 精品香蕉视频| 国产66精品| 欧美黄色网页| 免费不卡中文字幕在线| 夜夜嗨av一区二区三区网站四季av| 米奇777超碰欧美日韩亚洲| 视频一区二区中文字幕| 成人久久一区| 欧美美女一区| 视频一区二区不卡| 香蕉久久一区| 国产欧美综合一区二区三区| 国产精品网站在线看| 首页国产欧美久久| 国产精品久久久久av电视剧| 91精品久久久久久久久久不卡| 99精品美女| 蜜桃一区二区三区在线| 国产精品午夜一区二区三区| 日韩久久精品| 红桃视频欧美| 国产视频一区二| 国产精品精品| 欧美日韩黑人| 国产精品日韩精品中文字幕| 色偷偷色偷偷色偷偷在线视频| 香蕉久久99| 国产欧美日韩视频在线| 九九精品调教| 亚洲乱码视频| 国产精品午夜一区二区三区| 精精国产xxxx视频在线播放| 国产亚洲激情| 精品久久在线| 亚洲精品护士| 国产一区二区三区自拍| 国产精品亚洲成在人线| 蜜桃一区二区三区| 国产极品嫩模在线观看91精品| 欧美中文一区二区| 久久精品国产福利| 亚洲精品免费观看| 噜噜噜躁狠狠躁狠狠精品视频 | 精品一区亚洲| 久久99伊人| 亚洲v在线看| 蜜臀91精品一区二区三区| 久久精品 人人爱| 一区二区三区四区在线观看国产日韩 | 噜噜噜躁狠狠躁狠狠精品视频 | 亚洲不卡视频| 免费观看在线综合色| 国产亚洲在线观看| 欧美日韩国产高清| 久久久男人天堂| 精品网站aaa| 中文字幕高清在线播放| 国产福利一区二区精品秒拍| 奇米亚洲欧美| 国产精品一级在线观看| 国产精品综合| 鲁大师精品99久久久| 日韩深夜视频| 亚洲黄色影院| 日本免费一区二区视频| 日韩av一区二| 国产精品一二| 精品黄色一级片| а√天堂8资源在线| 久久久久伊人| 亚洲播播91| 激情综合激情| 天堂va蜜桃一区二区三区| 亚洲精品一级| 日韩av不卡在线观看| 日韩国产在线观看一区| 日本一区福利在线| 欧美丰满日韩| 日本一区福利在线| 久久精品一本| 亚洲精品2区| 老牛影视一区二区三区| 一区二区三区四区日韩| 国产欧美丝祙| 欧美精品成人| 激情欧美一区| 日韩av网站在线免费观看| 成人午夜毛片| 亚洲欧美日韩高清在线|