电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:44日期: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
相關文章:
主站蜘蛛池模板: 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 慈溪麦田广告公司,提供慈溪广告设计。| 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 家庭教育吧-在线家庭教育平台,专注青少年家庭教育 | 广东成考网-广东成人高考网| 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 深圳市超时尚职业培训学校,培训:月嫂,育婴,养老,家政;化妆,美容,美发,美甲. | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 联系我们-腾龙公司上分客服微信19116098882 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 河南凯邦机械制造有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 |