紅寶書總結 執行環境 作用域鏈

2021-09-24 08:23:40 字數 2103 閱讀 1920

基本概念

執行環境定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有乙個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中(開發者無法訪問,解析器在後台使用)

全域性執行環境是最外圍的乙個執行環境。web瀏覽器中,全域性執行環境被認為是window物件——因此,所有全域性變數和函式都是作為window物件的屬性和方法建立的。

某個執行環境中的所有**執行完畢後,該環境被銷毀,儲存在其中的所有變數和函式定義也隨之銷毀(全域性執行環境直到應用程式退出,如網頁關閉or瀏覽器關閉時才會被銷毀)

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

當**在乙個環境中執行時,會建立變數物件的乙個作用域鏈,作用域鏈保證對執行環境有權訪問的所有變數和函式的有序訪問。作用域鏈的前端,始終都是當前執行的**所在環境的變數物件。如果這個環境是函式,則將其活動物件作為變數物件。活動物件在最開始時只包含乙個變數,即arguments物件(arguments物件在全域性環境中不存在)

識別符號解析是沿著作用域鏈一級一級的搜尋識別符號的過程。

延長作用域鏈

執行環境的型別總共只有兩種——全域性和區域性(函式)

有些語句可以在作用域鏈的前端臨時增加乙個變數物件,該變數物件會在**執行後被移除。 a. try-cath語句的catch塊--建立乙個新的變數物件,其中包含的是被丟擲的錯誤物件的宣告 b. with語句--會將指定的物件新增到作用域鏈中

(with語句例項)

function

buildurl

() return url;

}複製**

with接收了location物件,因此其變數物件中就包含了location物件的所有屬性和方法。因此,其內部的href其實就是location.href。而url成了函式執行環境的一部分,所以可以作為函式的值被返回。

沒有塊級作用域

宣告變數

使用var宣告的變數會自動新增在最近的環境中,在函式內部,最接近的環境就是函式的區域性環境;在with語句中,最接近的環境是函式環境。如果初始化變數時沒有使用var宣告,該變數會自動被新增到全域性環境。

function

()複製**

嚴格模式下,初始化未經宣告的變數會導致錯誤

查詢識別符號

let與塊級作用域

console.log(foo);//undefined

var foo = 2;

console.log(bar);//報錯

let bar = 2;

複製**

var tmp = 123;

if(true)

複製**

暫時性死區意味著typeof不再是乙個百分之百安全的操作

typeof x;//報錯

let x;

typeof undeclared_variable//undefined

複製**

塊級作用域與函式宣告

function

f()

(function

() } f();

}());

es5瀏覽器中執行:i am inside!因為將f提公升到了函式頭部

es6瀏覽器:報錯:

相當於function

f()

(function

() } f();

}());

複製**

// 不報錯

'use strict';

if (true)

}// 報錯

'use strict';

if (true)

function

f() {}

複製**

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

宣告 該文章有些概念摘自 j ascript高階程式設計 1 執行環境 也稱 環境 執行環境定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。全域性定義的變數,函式裡面可以訪問。一般情況下,函式裡面定義的變數,全域性無法訪問 2 全域性執行環境 全域性執行環境是最外圍的一直執行環境,在web...

執行環境和作用域鏈

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

執行環境 作用域鏈及閉包

執行環境 execution context 定義了變數或函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有乙個與之關聯的變數物件 variable object 環境中定義的所有變數 形參和函式宣告都儲存在這個物件中。編碼時無法訪問這個變數物件,解析器在處理資料時會在後台使用。在web...