1. 程式人生 > >javascript執行環境以及作用域鏈的自己的一些理解

javascript執行環境以及作用域鏈的自己的一些理解

js的作用域鏈是一個很重要的概念,如果理解了它,可能會讓自己對於js的執行機制有一個更好的理解,因為自己也是一個初學者,所以希望通過這樣的形式記錄下來,讓自己記憶更加深刻。以是自己對於js作用域的一些理解:

A.首先是js的執行環境,也可以叫做執行上下文,一般稱為環境就行。並且在js中,有一個一直都存在的環境(執行環境),那就是全域性執行環境,也就是window物件,只有當結束全部程式或者是關閉網頁或是瀏覽器時,那這個全域性執行環境才會被銷燬。而其他的環境則是存放在一個環境棧當中。而如果要把一個環境存入環境棧中的話,舉一個例子就相當於:js執行到哪一個函式的時候,那麼js就會把這個函式的執行環境加入到環境棧中,在當函式執行完畢之後,那麼js再把這一個函式的環境從環境棧中拿出來。

B.其次就是js的作用域鏈,先說重要的一點:每一個執行環境都會有一個對應的變數物件,變數物件簡單來理解就是在環境中被定義的變數,函式等等一系列資料;再說作用域鏈:每當建立一個函式的時候,那麼js會自己為這個函式建立一個預先包含全域性變數物件的作用域鏈,然後把這個作用域鏈儲存在內部的[[Scope]]屬性中,當這個函式被呼叫的時候,首先就會將這個函式的執行環境新增到環境棧中,,然後通過複製函式的[[Scope]]屬性中的對 象就可以構建起執行環境的作用域鏈;

C.所以照我的理解,一個函式只要已創建出來之後,那麼這個函式的作用域鏈其實就已經會被確定下來,不管在哪個位置去執行這個函式的時候,那當函式的執行環境被加入到環境棧中時,那麼它就會去複製原本已經確定的作用域鏈來完成所需各種資料的查詢