js的執行環境及作用域

2022-02-09 21:53:07 字數 990 閱讀 2037

主要的是執行環境和作用域鏈。

執行環境定義了變數或函式有權訪問的其他資料,每個函式都有乙個執行環境,每個執行環境都有乙個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個變數物件中,但是我們編寫**不能訪問這個變數物件,解析器在處理資料時會在後台使用它。

每乙個函式都有乙個執行環境,每乙個執行環境都有乙個相關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。

當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。而在函式的執行之後,棧將其環境彈出,把控制權返回給之前的執行環境。

即是某個執行環境中的所有**執行完畢之後,該環境就被銷毀,儲存在其中的所有變數和函式定義也隨之銷毀。

1.產生:當**在乙個環境中執行時,會建立變數物件的乙個作用域鏈。

2.作用域鏈和變數物件之間的關係:函式的作用域鏈包括它本身的變數物件以及包裹它的外層和直到全域性作用域的所有變數物件。

3.用途:有了這個作用域鏈,就可以保證對執行環境有權訪問的所有變數和函式的有序訪問。

作用域鏈的前端始終是當前執行的**所在環境的變數物件,全域性執行環境的變數物件始終都是作用域鏈中的最後乙個物件。

識別符號解析是沿著作用域鏈一級一級搜尋識別符號的過程。搜尋過程始終從作用域鏈的前端開始,直到最外層作用域,如果找不到,通常導致錯誤發生。

上圖中包含三個執行環境

當函式執行的時候的作用域鏈

函式的引數也被當作變數來對待,訪問規則和執行環境中的其他變數相同。

小結:每乙個函式都有乙個執行環境,每個執行環境都有乙個變數物件,當這些函式都沒有執行時,就沒有作用域鏈,當執行流進入某個函式時,作用域鏈就產生了,就將執行環境串聯起來了,這些變數物件也就串聯起來了,這樣就能保證變數物件中的變數和函式能夠被有序的訪問。

js 執行環境及作用域

執行環境定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有乙個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。每個函式都有自己的執行環境。當執行流進入乙個函式時,函式的環境會被推入乙個環境棧中。而在函式執行之後,棧將其環境彈出,把控制權返回給之前的執行環境。...

執行環境及作用域

1.變數 基本型別和引用型別的值 可以直接操作儲存在基本資料型別變數中的值 基本資料型別值在記憶體中佔據固定大小的空間,因此儲存在棧中 操作引用資料型別,實際上是操作物件的引用,而不是直接操作記憶體物件 因為js不允許直接訪問記憶體中的位置 引用資料型別的值實際上是放在記憶體中的物件。但是給物件新增...

作用域及執行環境

每乙個函式都有自己的執行環境。在乙個環境中執行時,會有乙個作用域鏈來保證執行環境對變數和函式有序的訪問。有序是指 保證每個環境在訪問時,先在自己的變數物件 環境 裡搜尋變數和函式,搜尋不到時,再一級一級的往上查詢變數和函式,直到查詢到了全域性變數物件 例如window 但是任何環境都不能向下級中搜尋...