1. 程式人生 > >Javascript的作用域域作用域鏈的理解

Javascript的作用域域作用域鏈的理解

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()解析,就有該函式的執行環境,入棧。函式的活動物件。