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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章