執行環境及作用域
阿新 • • 發佈:2017-11-29
存在 com logs 但是 進入 tps 找不到 圖片 之前
主要的是執行環境和作用域鏈。
執行環境
執行環境定義了變量或函數有權訪問的其他數據,每個函數都有一個執行環境,每個執行環境都有一個與之關聯的變量對象,環境中定義的所有變量和函數都保存在這個變量對象中,但是我們編寫代碼不能訪問這個變量對象,解析器在處理數據時會在後臺使用它。
變量對象
每一個函數都有一個執行環境,每一個執行環境都有一個相關聯的變量對象,環境中定義的所有變量和函數都保存在這個對象中。
環境棧
當執行流進入一個函數時,函數的環境就會被推入一個環境棧中。而在函數的執行之後,棧將其環境彈出,把控制權返回給之前的執行環境。
即是某個執行環境中的所有代碼執行完畢之後,該環境就被銷毀,保存在其中的所有變量和函數定義也隨之銷毀。
作用域鏈
1.產生:當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈。
2.作用域鏈和變量對象之間的關系:函數的作用域鏈包括它本身的變量對象以及包裹它的外層和直到全局作用域的所有變量對象。
3.用途:有了這個作用域鏈,就可以保證對執行環境有權訪問的所有變量和函數的有序訪問。
作用域鏈的前端始終是當前執行的代碼所在環境的變量對象,全局執行環境的變量對象始終都是作用域鏈中的最後一個對象。
標識符解析
標識符解析是沿著作用域鏈一級一級搜索標識符的過程。搜索過程始終從作用域鏈的前端開始,直到最外層作用域,如果找不到,通常導致錯誤發生。
上圖中包含三個執行環境
當函數執行的時候的作用域鏈
函數的參數也被當作變量來對待,訪問規則和執行環境中的其他變量相同。
執行環境及作用域