JS之作用域精解

2021-08-22 03:15:15 字數 1054 閱讀 4603

一。執行期上下文:當函式執行時,會建立乙個成為執行期上下文的內部物件。乙個執行期上下文定義了乙個函式執行時的環境,函式每次執行時對應的執行期上下文都是獨一無二的,所以多次呼叫乙個函式會建立多個執行期上下文。每當函式執行完畢,它所產生的執行期上下文被銷毀。

即:函式執行時才會產生自己的ao,執行結束後立即銷毀自己的ao。

二。查詢變數:從函式作用域的頂端依次向下查詢。

三。[[ scope ]]  :每個js函式都是乙個物件,物件中有一些屬性我們可以訪問,但有些不可以,這些屬性僅供js引擎訪問,

[[ scope ]] 就是其中乙個。

[[ scope ]] 指的是我們所說的作用域,其中儲存了執行期上下文的集合。

四。作用域鏈:[[ scope ]] 中所儲存的執行期上下文物件的集合,這個集合呈現鏈式連線,我們把這種鏈式連線叫做作用域鏈

(我們真正看的東西,需要的東西,將在這裡面查詢)

下面的**模擬作用域鏈的產生:

function a()  

var a = 123;

b();

}var glob = 100;

a();

過程: 作用域鏈(由上至下)

1. a函式被定義: go

2. a函式被執行: ao a } 這是a的ao。在b執行結束後銷毀。

go global:100 }

3. b函式被定義: ao a }

go global:100 }

4. b函式被執行: ao b } 這是b的ao。在b執行結束後銷毀。

ao a }

go global:100 }

函式被定義的時候產生的作用域鏈直接是他外部封裝他的函式的ao.go,在執行時,作用域鏈的最頂層新增自己的ao,其餘的ao,ao按照原來的順序依次下移一位。

這就好像 站在巨人的肩膀上看世界,剛出生時他能看到的東西,其實就是巨人看到的東西。

js之作用域

1.什麼是作用域 作用域是用於收集儲存維護變數,以及當前執行 宣告的變數所擁有的許可權,例如 function foo a foo1 666 function foo2 a g a 在foo2函式中 a向g賦值 此時g在foo2作用域中也不存在,他也向上查詢,遇到window物件,發現其中也沒有定義...

作用域 作用域鏈 精解

物件有屬性有方法 一切有物件的東西都有屬性 物件導向就是基於此了解物件導向 在函式方法上有乙個隱性屬性 scope 作用域 其中儲存了執行期上下文的集合也就是預編譯時所產生的 稱為執行期上下文的內部物件ao 在函式執行的前一刻會進行預編譯 生成ao物件 什麼是預編譯 函式每次執行時所生成的執行期上下...

JS作用域精講

當我們定義乙個變數並給他賦值時var a 1 其實js引擎分開了兩步來執行 1.var a宣告這個變數,並將它放到當前作用域中去 2.a 1在作用域中找到變數a然後將其賦值1 函式亦是如此 當我們宣告乙個函式時function fn js引擎同樣將其分開了兩步來執行 1.function fn fu...