Javascript的作用域域作用域鏈的理解
阿新 • • 發佈:2019-02-01
1.要理解作用域就得理解JS引擎解析機制
如何解析一段可執行程式碼?
分了兩個階段:解析程式碼和執行程式碼。其中解析程式碼可以理解為記名字,就是先把關鍵字var和function定義的變數名登記了下來,這也就有了變數提升這一說。在執行程式碼階段才是真正的執行賦值,運算等操作。
2.建立全域性物件,建立執行環境棧,建立全域性執行環境,入棧
暫不解析這幾個名詞,先來看一個例子。
var scope = 'global'; function fn(){ alert(scope); var scope ='local'; alert(scope); } fn(); alert(scope);
(1)先建立全域性物件GO(global object),全域性執行環境ECG(execute context global)入棧。
GO中會存放全域性變數,ECG是一個程式碼執行環境,每個塊程式碼被執行時中都進入一個環境,在這個環境裡就是維護了這段程式碼的變數。而ECG則是全域性的。
(2)解析程式碼(找變數名)
(3)執行程式碼(賦值,執行函式)
(4)fn()解析,就有該函式的執行環境,入棧。函式的活動物件。