js執行環境相關

2022-07-18 01:45:15 字數 1787 閱讀 8991

js執行過程

如果乙個文件中存在多個**段 

步驟一:讀入第乙個**段(js引擎並非一行一行執行,而是一段一段分析執行)

步驟二:做詞法分析和語法分析,有錯則報語法錯誤(比如括號不匹配等),並跳轉到步驟5

步驟三:對【var】變數和【function】定義做「預解析「(永遠不會報錯的,因為只解析正確的宣告)

步驟四:執行**段 ,有錯則報錯(比如變數未定義)

步驟六:結束

通過步驟二 js會先生成乙個語法分析樹(syntaxtree)

語法分析樹可以理解為 記錄 變數集 作用域集 方法集的  資料庫一樣的東西。

/*

** 模擬建立一棵語法分析樹,儲存function內的變數和方法

*/var sytaxtree = //

假設我們全域性變數中有乙個name

}, functions:

},sayname:

}}//在這一步的時候 變數集中 只有變數定義,沒有變數值,這時候的變數值全部為「undefined」

//

詞法作用域: 變數在定義的時候形成作用域,而不是在執行的時候。

在進入上下文時宣告,在執行上下文賦值

function

test()

console.log(a);

//a is not defined

執行環境與活動物件

我們呼叫每乙個方法的時候,js 引擎都會自動為其建立乙個執行環境和乙個活動物件,它們和方法例項的生命週期保持一致,為方法執行提供必要的執行支援

執行環境executioncontext: 記錄了當前方法的外部描述資訊,比如型別,名稱,引數和活動物件(activeobject)

var executioncontext =,

a:};

在執行的時候才生成活動物件 ,活動物件的 北部變數集、內嵌函式集是從 語法分析樹 複製過來的

活動物件activeobject: 記錄了當前方法的內部描述資訊,內部變數集(variables)、內嵌函式集(functions)、實參(arguments)、作用域鏈(scopechain)等執行所需資訊

var activeobject=,

a:},

functions:,

parameters:,

arguments: //實參

} }

乙個方法的執行過程:

建立活動物件,從語法分析樹複製方法的內部變數集(variables)和內嵌函式集(functions)

方法開始執行時: 活動物件- 內部的變數全部被重置為undefined 。

建立形參(parameters)和實參(arguments)物件,同名的實參,形參和變數之間是【引用】關係

執行方法內的賦值語句 : 內部的變數才會被賦值 。

變數查詢規則: 現在當前的activeobject查詢,找不到 則順著 scopechain 指向的活動物件 繼續,直到找到最頂點 activeobject.window

方法執行完畢以後:內部變數不會被重置

方法內變數的生存週期取決於方法例項是否存在活動引用,如沒有就銷毀活動物件

6.7 是使閉包能夠訪問到外部變數的根本原因

cefsharp 執行環境與JS

cef其是封裝了google的chromium瀏覽器控制項,cefsharp其是對於cef的.net封裝,且是使用cli的方式封裝,那其就有三個專案 chromium,cef,cefsharp chromium cef cefsharp cefsharp其的基本類 c native層 1.libce...

js函式的執行環境

js的函式本質上是一種物件,是物件就會有自己的環境 作用域 看下面的例子 var var1 var var2 var2.getmessage 這段 會輸出 var2 不對啊,應該是輸出 var1 啊,但是這裡確實應該輸出 var2 不信你自己實驗。這就是函式體中的this在起作用,var2的函式ge...

HTML中 js執行環境切換

在父窗體中,要把執行環境切換到iframe內部,使用 new function,事件,event等都會無效,執行環境始終會在父視窗中。要切換環境需要把要執行的函式寫到iframe內部的script標籤 var doc iframe.contentwindow.document jscontent是要...