如何理解作用域鏈

2021-10-01 16:21:01 字數 1536 閱讀 3937

在js中作用域是什麼???

何為作用域

任何程式語言都有作用域的概念,簡單來說,作用域就是變數與函式的可訪問範圍,即作用域控制著變數與函式的可見性和生命週期。

js的作用域是靠函式來形成的,也就是說乙個函式的變數在函式外不可以訪問。

1全域性作用域也就是go

任何地方都能訪問到的物件擁有全域性作用域。

1.1函式外面定義的變數擁有全域性作用域

var a =10;

function

fun1()

console.

log(a)

;//這時候的a就是全域性變數

1.2未定義直接賦值的變數自動宣告為擁有全域性作用域

var a =10;

function

fun1()

console.

log(b)

;//這時候的b也就是全域性變數

3.window物件的屬性擁有全域性作用

2 區域性作用域 也就是ao

區域性作用域一般只在固定的**片段內可訪問到,最常見的例如函式內部,所以在一些地方會把這種作用域成為函式作用域。

var a =10;

function

fun1()

console.

log(b)

;//這時候的函式裡面的a , b 就是區域性變數

我們了解了 區域性和氣全域性, 那我們怎麼理解 go 和ao呢,我們用解釋一下它的過程!

main() 就是乙個起始,然後這時候我們的變數宣告就會提前,而他們的值就如圖 為unfdeined, 函式也會提上前

我舉乙個簡單的小例子 如圖中一樣

console.

log();

var a =10;

//這時候a的輸出結果為 undefined;

//以為 宣告變數會提前,這段**實際就是

var a ;

console.

log(a)

; a =10;

//這樣就很明顯可以看到為什麼是 undefined

go 就是 乙個全域性, 裡面的東西大家都可以呼叫,

ao就是函式裡面的 內容`

var a =

10function

fun(

)fun()

;

上面這段** a 就是乙個全域性變數 存在go中而b就存在函式fun() 的ao中 在fun的ao中沒有宣告變數 a 怎麼辦這個時候就會去全域性 go裡面去找 有我就拿過來用,所以這個時候 a的輸出就是20,

注意這裡的不好的地方 全域性變數 會被改變,所以盡量不要使用全域性變數

回到ao在 函式執行完畢後 ao就會消失, 我們上面**中的b 也會消失!

理解作用域鏈

先來看兩個例子 var x 10 bar 10 function foo function bar 解析 執行bar,相當於執行foo foo裡面要輸出x,我們首先要從foo自己的作用域下面去找 foo裡邊是沒有宣告x的,然後我們會到foo的詞法作用域去找,也就是宣告foo的作用域去找。在這裡foo...

理解作用域鏈和原型鏈

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

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

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