摘要:活動的執(zhí)行上下文組在邏輯上組成一個堆棧。堆棧底部永遠都是全局上下文,而頂部就是當前活動的執(zhí)行上下文。一個拋出的異常如果沒被截獲的話也有可能從一個或多個執(zhí)行上下文退出。相關代碼執(zhí)行完以后,只會包含全局上下文,一直到整個應用程序結束。
1 定義
每次當控制器轉到ECMAScript可執(zhí)行代碼的時候,即會進入到一個執(zhí)行上下文。執(zhí)行上下文(簡稱-EC)是ECMA-262標準里的一個抽象概念,用于同可執(zhí)行代碼(executable code)概念進行區(qū)分。
標準規(guī)范沒有從技術實現的角度定義EC的準確類型和結構,這應該是具體實現ECMAScript引擎時要考慮的問題。
活動的執(zhí)行上下文組在邏輯上組成一個堆棧。堆棧底部永遠都是全局上下文(global context),而頂部就是當前(活動的)執(zhí)行上下文。堆棧在EC類型進入和退出上下文的時候被修改(推入或彈出)。
2 全局代碼全局代碼不包括任何function體內的代碼。
在初始化(程序啟動)階段,ECStack是這樣的:
ECStack = [ globalContext ];3 函數代碼
當進入funtion函數代碼(所有類型的funtions)的時候,ECStack被壓入新元素。需要注意的是,具體的函數代碼不包括內部函數(inner functions)代碼。如下所示,我們使函數自己調自己的方式遞歸一次:
(function foo(bar) { if (bar) { return; } foo(true); })();
那么,ECStack以如下方式被改變:
// 第一次foo的激活調用
ECStack = [functionContext globalContext ];
// foo的遞歸激活調用
ECStack = [functionContext – recursively functionContext globalContext ];
每次return的時候,都會退出當前執(zhí)行上下文的,相應地ECStack就會彈出,棧指針會自動移動位置,這是一個典型的堆棧實現方式。一個拋出的異常如果沒被截獲的話也有可能從一個或多個執(zhí)行上下文退出。相關代碼執(zhí)行完以后,ECStack只會包含全局上下文(global context),一直到整個應用程序結束。
本文絕大多數內容參考自: http://www.cnblogs.com/TomXu/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86611.html
摘要:活動對象的變化與處理上下文的兩個階段密切相關。所有變量聲明由名稱和對應值組成一個變量對象的屬性被創(chuàng)建如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性。 1 定義 如果變量與執(zhí)行上下文相關,那變量自己應該知道它的數據存儲在哪里,并且知道如何訪問。這種機制稱為變量對象(variable object)。變量對象(縮寫為VO)是一個與執(zhí)行上下文相關的特殊對象,...
摘要:最后重點理解結論箭頭函數的,總是指向定義時所在的對象,而不是運行時所在的對象。輸出,箭頭函數不會綁定所以傳入指向無效。原因是,要徹底理解應該是建立在已經大致理解了中的執(zhí)行上下文,作用域作用域鏈,閉包,變量對象,函數執(zhí)行過程的基礎上。 本文共 2025 字,看完只需 8 分鐘 概述 前面的文章講解了 JavaScript 中的執(zhí)行上下文,作用域,變量對象,this 的相關原理,但是我...
摘要:全局和上下文中的作用域鏈這里不一定很有趣,但必須要提示一下。全局上下文的作用域鏈僅包含全局對象。代碼的上下文與當前的調用上下文擁有同樣的作用域鏈。代碼執(zhí)行時對作用域鏈的影響在中,在代碼執(zhí)行階段有兩個聲明能修改作用域鏈。 1 定義 我們已經知道一個執(zhí)行上下文中的數據(參數,變量,函數)作為屬性存儲在變量對象中。 也知道變量對象是在每次進入上下文是創(chuàng)建并填入初始值,值的更新出現在代碼執(zhí)行階...
摘要:構造函數中的當一個函數被作為一個構造函數來使用使用關鍵字,它的與即將被創(chuàng)建的新對象綁定。因此,如果傳遞的值是一個原始值比如或,那么就會使用相關構造函數將它轉換為對象,所以原始值通過被轉換為對象,而字符串使用轉化為對象,例如方法引入了。 1 全局上下文中的this 在瀏覽器引擎的全局運行上下文中(在任何函數體外部),this 指代全局對象,無論是否在嚴格模式下。 use str...
摘要:是完全的面向對象語言,它們通過類的形式組織函數和變量,使之不能脫離對象存在。而在基于原型的面向對象方式中,對象則是依靠構造器利用原型構造出來的。 JavaScript 函數式腳本語言特性以及其看似隨意的編寫風格,導致長期以來人們對這一門語言的誤解,即認為 JavaScript 不是一門面向對象的語言,或者只是部分具備一些面向對象的特征。本文將回歸面向對象本意,從對語言感悟的角度闡述為什...
閱讀 3416·2021-11-24 09:38
閱讀 3194·2021-11-22 09:34
閱讀 2108·2021-09-22 16:03
閱讀 2368·2019-08-29 18:37
閱讀 380·2019-08-29 16:15
閱讀 1770·2019-08-26 13:56
閱讀 866·2019-08-26 12:21
閱讀 2207·2019-08-26 12:15