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

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

javascript執行上下文、變量對象實例分析

瀏覽:3日期:2023-11-02 08:03:18

本文實例講述了javascript執行上下文、變量對象。分享給大家供大家參考,具體如下:

突然看到一篇遠在2010年的老文,作者以章節的形式向我們介紹了ECMA-262-3的部分內容,主要涉及到執行上下文、變量對象、作用域、this等語言細節。內容短小而精悍,文風直白而嚴謹,讀完有酣暢淋漓、醍醐灌頂之感,強烈推薦?。?!

原文鏈接:這里

本想翻譯成文,原來早已有人做了,這里。真生不逢時,何其遺憾??!

做個筆記,聊慰我心。執行上下文 ExecutionContext

每當控制器(control)轉換到ECMAScript可執行代碼時,都會創建并進入到一個可執行上下文。

一段簡短的句子,卻包含著豐富的內容:

控制器:即js引擎 轉換:從一段可執行代碼跳轉到另一段可執行代碼 可執行代碼:全局代碼、函數代碼、eval代碼(分別對應三種作用域) 執行上下文:是一個抽象的概念,ECMA-262標準用這個概念同可執行代碼(executable code)概念進行區分

執行上下文在邏輯上組成一個堆棧。堆棧底部永遠都是全局上下文(global context),堆棧頂部是當前/活動的執行上下文(activeExecutionContext)。堆棧在EC類型的變量(various kingds of EC)被推入或彈出的同時被修改。

例如,我們可以定義一個數組來模擬執行上下文堆棧:

ECStack = [ globalContext, <foo> functionContext]變量對象 VariableObject

變量對象(VO)作為執行上下文的一個屬性存在,它存儲下列內容:

所有變量聲明 (var, VariableDeclaration) VO的一個屬性,這個屬性由變量名稱和undefined值組成;如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性。 函數聲明 (FunctionDeclaration, 縮寫為FD) VO的一個屬性,這個屬性由一個函數對象(function-object)的名稱和值組成;如果變量對象已經存在相同名稱的屬性,則完全替換這個屬性。 以及函數的形參 VO的一個屬性,這個屬性由一個形式參數的名稱和值組成;如果沒有對應傳遞實際參數,那么這個屬性就由形式參數的名稱和undefined值組成;

VO = { // context data (var, FD, function arguments) }

當我們聲明一個變量或一個函數的時候,同時還用變量的名稱和值在VO里創建了一個新的屬性。例如:

var m = 30;function test(a,b) { var c = 20 function d() {} var e = function _e() {};}test(10)

當進入“test”函數的上下文時(傳遞參數10),AO如下:

AO(test) = { a: 10, b: undefined, c: undefined, d: <reference to FunctionDeclaration 'd'> e: undefined};

test執行到最后時,對應此刻上下文堆棧:

ECStack = [ globalContext: { VO: { m: 30, test: } }, test functionContext: { VO: { a: 10, b: undefined, c: 20, d: <reference to FunctionDeclaration 'd'>, e: <reference to FunctionDeclaration '_e'> } }]關于變量

通常,各類文章和JavaScript相關的書籍都聲稱:“不管是使用var關鍵字(在全局上下文)還是不使用var關鍵字(在任何地方),都可以聲明一個變量”。請記住,這絕對是謠傳:任何時候,變量只能通過使用var關鍵字才能聲明。

讓我們通過下面的實例看看具體的區別吧:

alert(a); // undefinedalert(b); // 'b' is not defined b = 10;var a = 20;

所有根源仍然是VO和它的修改階段(進入上下文階段和執行代碼階段):

VO = { a: undefined};

我們可以看到,因為“b”不是一個變量,所以在這個階段根本就沒有“b”,“b”將只在執行代碼階段才會出現(但是在我們這個例子里,還沒有到那就已經出錯了)。

讓我們改變一下例子代碼:

alert(a); // undefined, we know why b = 10;alert(b); // 10, created at code execution var a = 20;alert(a); // 20, modified at code execution

關于變量,還有一個重要的知識點。變量相對于簡單屬性來說,變量有一個特性(attribute):{DontDelete},這個特性的含義就是不同通過delete操作符直接刪除變量屬性。

a = 10;alert(window.a); // 10 alert(delete a); // true alert(window.a); // undefined var b = 20;alert(window.b); // 20 alert(delete b); // false alert(window.b); // still 20

2018-8-2-再看執行上下文、變量對象

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 黑田精工电磁阀-CAMMOZI气缸-ROSS电磁-上海茂硕机械设备有限公司 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 滚珠丝杆升降机_螺旋升降机_丝杠升降机-德迈传动 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 杭州门窗厂家_阳光房_包阳台安装电话-杭州窗猫铝合金门窗 | 耐高温硅酸铝板-硅酸铝棉保温施工|亿欧建设工程 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 江西自考网-江西自学考试网| 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 |