關於ECMAScript5官方文檔中執行環境的組成中詞法環境和變數環境的區別?

在ECMAScript5官方文檔中 10.3執行環境的狀態組件中詞法環境和變數環境的區別是什麼?

為什麼在定義綁定初始化的過程中使用到的是變數環境而在標識符解析過程中用到的確實詞法環境?


瀉藥

簡單來說

看原文文檔

名為 LexicalEnvironment 的 Lexical Environment 類型組件

Lexical Environment 的名詞說明的意思

A Lexical Environment is a specification type used to define the association of Identifiers to specific variables and functions based upon the lexical nesting structure of ECMAScript code. A Lexical Environment consists of an Environment Record and a possibly null reference to an outer Lexical Environment. Usually a Lexical Environment is associated with some specific syntactic structure of ECMAScript code such as aFunctionDeclaration, a WithStatement, or a Catch clause of a TryStatement and a new Lexical Environment is created each time such code is evaluated.

是說詞法環境是與解析相關的

意思就是說是靜態不變的,相互關係是固化的。

所以

Identifier resolution is the process of determining the binding of an Identifier using the LexicalEnvironment of the running execution context.

所以 Identifier resolution 時候得去確定它

確定後不可變

(當然這是說 JS 使用者層面不可變,不是 JS 引擎不能動態變化其關係 )

相反的

運行時需要變更的內容,比如 this 指向,function 的 bind 函數 ,call、apply 均可隨時改變它

那麼這種變化得地方放置,得有地方放,並且它是與 Lexical Environment 相關的,得可以根據當前的 LexicalEnvironment 來獲取其語法聯繫相關的內容。

Identifies the Lexical Environment whose environment record holds bindings created by VariableStatements and FunctionDeclarations within this execution context.

所以在 Lexical Environment 的基礎上還得補充一個 VariableEnvironment 來存放它們

Declaration Binding Instantiation 因而存在,且與 VariableEnvironment 相關。


推薦閱讀:

怎麼梳理大量複雜的知識內容?
有哪些炫酷的sublime text3 主題?
成為一個全棧工程師是一種什麼體驗?
大公司或專業團隊目前流行的前端工具有什麼?

TAG:JavaScript | 前端工程師 | ECMAScript | 原生JavaScript |