執行環境,作用域,作用域鏈詳解

2022-09-13 02:06:17 字數 1133 閱讀 1440

宣告:該文章有些概念摘自《j**ascript高階程式設計》

1、執行環境:也稱「環境

」,執行環境定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。(全域性定義的變數,函式裡面可以訪問。一般情況下,函式裡面定義的變數,全域性無法訪問)。

2、全域性執行環境:全域性執行環境是最外圍的一直執行環境,(在web瀏覽器中,全域性執行環境被認為是window物件,因此所有全域性變數和函式都是作為window物件的屬性和和方法建立的),全域性環境直到應用程式退出(關閉網頁或者重新整理網頁)才會被銷毀。

3、區域性執行環境:某個函式的區域性執行環境中的所有**執行完畢後,該環境被銷毀,儲存在其中的所有變數和函式定義也隨之銷毀。

4、變數物件:每個執行環境都有乙個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。(我們無法訪問這個物件,但是解析器在處理資料時會在後台使用它)。

5、活動物件:活動物件

在函式執行環境中會被作為變數物件

。活動物件在最開始時只包含乙個變數(argument物件)。(變數物件在函式執行環境中稱為活動物件)

6、作用域鏈:當**在乙個環境中執行時,會建立變數物件的乙個作用域鏈。作用域鏈的用途,是保證對執行環境有權訪問的所有變數和函式的有序訪問。(作用域鏈的前端,始終都是當前執行的**所在環境的活動物件);

作用域鏈中的下乙個變數物件來自包含(外部)環境,而在下乙個變數物件則來自下乙個包含環境。這樣一直延續到最後的全域性執行環境。

作用域鏈例子一:

1

輸出的都是 x ,卻得到三個完全不一樣的值。

來想象下他們的作用域鏈 :

1、add2 函式區域性執行環境--作用域鏈: add2定義的x——》add1定義的x——》

全域性定義的x

2、add1 函式區域性執行環境--作用域鏈: add1定義的x——》全域性定義的x

3、全域性執行環境--作用域鏈: 全域性定義的x

add2執行的時候,如果在add2函式區域性執行環境沒找到變數物件

x,它會往上一級add1中找變數物件

x ;如果在add1函式區域性執行環境中沒找到變數物件

x ,他會往全域性執行環境中找。例子中,函式add2在自己的執行環境中找到了變數物件 x ,就不再繼續往上找,而是輸出自己他這一級的 x 。(函式引數也被當作變數來對待)

JavaScript 作用域,作用域鏈詳解

前言 es5缺少區域性作用域的概念,而es6已經補充了es6的概念。一 作用域 把作用域比作乙個個封閉的方塊,在相同乙個封閉方塊中的物體可以相互接觸,但是無法和別的封閉方塊中的物體直接接觸。二 全域性作用域 這個就是簡單的全域性作用域。全域性作用域相當於乙個最大的封閉空間,他裡面還有乙個個小的封閉空...

執行環境和作用域鏈

執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為。每個執行環境都有乙個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。全域性執行環境是最外圍的乙個執行環境。根據ecmascript實現所在的宿主環境不同,表示執行環境的物件也不同。在web瀏覽器中,全域性執行環境被認...

作用域 作用域鏈

理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用隔離變數,不同作用域下同名變數不會有衝突 區別1全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。而不是在函式呼叫時 ...