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

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

JavaScript ECMA-262-3 深入解析(一):執行上下文實例分析

瀏覽:5日期:2023-11-02 10:01:59

本文實例講述了JavaScript ECMA執行上下文。分享給大家供大家參考,具體如下:

介紹

這篇文章我們主要探討ECMAScript執行上下文和相關的ECMAScript可執行代碼。

定義

每次當控制器轉到ECMAScript可執行代碼的時候,即會進入到一個執行上下文。

執行上下文(簡稱-EC)是一個抽象概念,ECMA-262標準用這個概念同可執行代碼(executable code)概念進行區分。

標準規范沒有從技術實現的角度準確定義EC的類型和結構;這應該是具體實現ECMAScript引擎時要考慮的問題。

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

可執行代碼

可執行代碼的概念與抽象的執行上下文的概念是相對的。在某些時刻,可執行代碼與執行上下文是等價的。

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

ECStack = [];

每次進入函數 (即使函數被遞歸調用或作為構造函數) 的時候或者內置的eval函數工作的時候,這個堆棧都會被推入。

全局代碼

這種類型的代碼是在'程序'級處理的:例如加載外部的js文件或者本地的在<script></script>標簽內的代碼。全局代碼不包括任何函數體內的代碼。

在初始化(程序啟動)階段,ECStack是這樣的:

ECStack = [ globalContext];函數代碼

當進入函數代碼(所有類型的函數),ECStack被推入新元素。要注意的是,具體的函數代碼不包括內部函數(inner functions)代碼。如下所示,我們使函數自己調自己的方式遞歸一次:

(function foo(bar) { if (bar) { return; } foo(true);})();

那么,ECStack以如下方式被改變:

// first activation of fooECStack = [ <foo> functionContext globalContext]; // recursive activation of fooECStack = [ <foo> functionContext ? recursively <foo> functionContext globalContext];

每次返回存在的當前執行上下文和ECStack彈出相應的執行上下文的時候,棧指針會自動移動位置,這是一個典型的堆棧實現方式。一個被拋出但是沒有被截獲的異常,同樣存在一個或多個執行上下文。當相關段代碼執行完以后,直到整個應用程序結束,ECStack都只包括全局上下文(global context)。

Eval 代碼

eval 代碼有點兒意思。它有一個概念: 調用上下文(calling context), 這是一個當eval函數被調用的時候產生的上下文。eval(變量或函數聲明)活動會影響調用上下文(calling context)。

eval(’var x = 10’); (function foo() { eval(’var y = 20’);})(); alert(x); // 10alert(y); // 'y' is not defined

ECStack的變化過程:

ECStack = [ globalContext]; // eval(’var x = 10’);ECStack.push( evalContext, callingContext: globalContext); // eval exited contextECStack.pop(); // foo funciton callECStack.push(<foo> functionContext); // eval(’var y = 20’);ECStack.push( evalContext, callingContext: <foo> functionContext); // return from evalECStack.pop(); // return from fooECStack.pop();

看到了吧,這是一個非常普通的邏輯調用堆棧

在版本號1.7以上的SpiderMonkey(內置于Firefox,Thunderbird)的實現中,可以把調用上下文作為第二個參數傳遞給eval。那么,如果這個上下文存在,就有可能影響“私有”(類似以private關鍵字命名的變量一樣)變量。

function foo() { var x = 1; return function () { alert(x); };}; var bar = foo(); bar(); // 1 eval(’x = 2’, bar); // pass context, influence on internal var 'x' bar(); // 2結論

這篇文章的內容是未來分析其他跟執行上下文相關的主題(例如變量對象,作用域鏈,等等)的最起碼的理論基礎,這些主題將在后續章節中講到。

其他參考

這篇文章的內容在ECMA-262-3 標準規范中對應的章節.

英文地址 : ECMA-262-3 in detail. Chapter 1. Execution Contexts

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 空压机网_《压缩机》杂志| 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 北京京云律师事务所| 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 书信之家_书信标准模板范文大全 最新范文网_实用的精品范文美文网 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 质构仪_鱼糜弹性仪-上海腾拔仪器科技有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 |