1. 程式人生 > 其它 >執行上下文和作用域鏈

執行上下文和作用域鏈

1.執行上下文

分類:{
全域性執行上下文
函式執行上下文
eval函式執行上下文
}
執行棧:{
執行棧就是“呼叫棧”,是一種LIFO(先進先出)的資料結構域
用於儲存程式碼執行的執行上下文
當引擎在執行指令碼時,先建立全域性執行上下文壓入棧
當引擎呼叫一個函式時,會為該函式建立執行上下文壓入棧頂部
引擎會先執行執行上下文在頂部的函式,執行後,會彈出,然後控制流程會到達當前執行上下文的下一個上下文
一旦所有程式碼執行完畢,js引擎從執行棧中移除全域性執行上下文
}

2.作用域鏈

作用域2種工作模型:{
詞法環境:es6之前的作用域鏈,作用域鏈由詞法環境決定,js採用
變數環境
}
作用域鏈:{
作用域:就是隔離變數,分為全域性作用域、方法作用域、塊級作用域
作用域鏈:變數查詢,從當前作用域一層一層向上查詢,就是作用域鏈
}

3.比較

js執行:{
解釋階段:詞法分析、語法分析、作用域規則確定
執行階段:執行上下文、執行函式程式碼
}
作用域和執行上下文區分:{
作用域在程式碼定義就確定了,執行上下文是在程式碼執行生成
作用域訪問的變數是編寫程式碼確定的,執行上下文訪問的this是執行時確定
作用域中可能有多個執行上下文
同一作用域,不同調用會產生不同的執行上下文
}