执行上下文(Exection Contexts)
為什么80%的碼農都做不了架構師?>>> ??
知識點:
執行上下文(EC)是ECMA-262標準的一個抽象概念,沒有從技術實現的角度定義標準類型和結構,不同于可執行代碼概念。每當控制器轉到ECMAScript可執行代碼的時候,就會產生一個EC;
活動的執行上下文在邏輯上組成了一個堆棧;
堆棧底部永遠是全局上下文(global context),而頂部是當前的活動的執行上下文;
全局上下文(全局代碼-globalContext)是在程序級處理的,如外部加載的js文件或者本地script標簽內的代碼,不包含function內的代碼。在程序啟動階段,堆棧內會自動將gobalContext壓在最下面;
函數代碼:每次進入function(即使function被遞歸調用或者作為構造函數)的時候(這里了指的是類型為function的函數,不包含函數內部的fuction),產生的執行上下文就會被推入這個堆棧,執行完后就會被彈出該堆棧,棧指針也會自動移動位置;
Eval代碼:調用Eval代碼所在的上下文,如果在全局則callingContext:globalContext,如果在xxx函數內則callingContext:<xxx>functionContext;
執行上下文包含:變量對象(VO)、this指針(this)和作用域鏈(Scope Chain),根據現實還可以具有任意額外屬性(例如:withObject | catchObject);
如果一個拋出的異常沒有被截獲的話,也有可能從一個或者多個執行上下文中退出;
等相關代碼執行完后,邏輯堆棧只會包含全局上下文,一直到整個程序結束。
理解:
每當執行代碼就會產生一個執行上下文,該執行上下文會被推進一個堆棧內處理,處理完了彈出來,根據代碼的不同,產生的上下文也不同,但堆棧底部永遠是全局上下文。用偽代碼比較好理解這個不同如下:
?
轉載于:https://my.oschina.net/Karon/blog/495476
總結
以上是生活随笔為你收集整理的执行上下文(Exection Contexts)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveMQ BrokeUrl的配置
- 下一篇: 深入PHP面向对象、模式与实践读书笔记: