理解作用域鏈

2021-10-04 18:13:04 字數 1237 閱讀 1037

先來看兩個例子

var x = 10;

bar(); //10

function foo()

function bar()

解析

執行bar,相當於執行foo(),foo裡面要輸出x,我們首先要從foo自己的作用域下面去找

foo裡邊是沒有宣告x的,然後我們會到foo的詞法作用域去找,也就是宣告foo的作用域去找。

在這裡foo的詞法作用域就是全域性作用域,全域性作用域裡宣告的x=10,所以輸出10

var x = 10;

bar(); //30

function bar()

foo();

}

解析

執行bar(),就會執行foo().foo裡輸出x,我們首先找foo的作用域裡,發現沒有宣告x

那就接著找foo的詞法作用域。也就是宣告foo的作用域,發現有x=30,於是輸出了30

一 、execution context (執行上下文,也叫執行環境):

二 、scope chain(作用域鏈),activation object(活動物件)

三 、[[scope]]屬性

//範例1

var x = 10;

bar(); //10

function foo()

function bar() ,

scope:null

}宣告bar時 得到下面:

bar().[[scope]] = global context.ao

宣告foo時 得到下面:

foo().[[scope]] = global context.ao

執行**的時候,當我們需要乙個值,會首先從它的活動物件裡去找,如果找不到就要到它的[[scope]] 裡去找。

2.當呼叫bar()時,進入bar的執行上下文

因為bar裡值宣告了乙個x,所以bar的活動物件裡只有乙個x

barcontext = ,

scope :bar.[[scope]] //global context.ao

}3. 當呼叫foo()的時候,進入foo的執行上下文

foocontext =

scope:foo.[[scope]] //global context.ao

}

如何理解作用域鏈

在js中作用域是什麼?何為作用域 任何程式語言都有作用域的概念,簡單來說,作用域就是變數與函式的可訪問範圍,即作用域控制著變數與函式的可見性和生命週期。js的作用域是靠函式來形成的,也就是說乙個函式的變數在函式外不可以訪問。1全域性作用域也就是go 任何地方都能訪問到的物件擁有全域性作用域。1.1函...

理解作用域鏈和原型鏈

作用域鏈的概念 要理解es中作用域鏈,首先要從理解執行環境開始。es中 執行都是在乙個具體的執行環境中進行的,每個執行環境有乙個與之關聯的變數物件,該變數中包含著在這個執行環境中可以訪問的變數和函式。這裡所說的執行環境就相當於作用域。最外圍的執行環境是全域性環境,在web瀏覽器中也就是window物...

JS深入理解作用域 作用域鏈,變數提公升

1 作用域 1 全域性作用域 在瀏覽器載入我們html頁面的時候,首先會開闢乙個供js 執行的環境,即全域性作用域,這是乙個棧記憶體 2 私有作用域 函式執行時,開闢乙個新的棧記憶體,形成私有作用域 2 基本資料型別與引用資料型別區別?基本資料型別 string,number,boolean,nul...