JS 宣告提前和作用域鏈以及例項

2021-09-11 06:16:05 字數 973 閱讀 7657

宣告提前

要明確var a = 1;

這是乙個變數的宣告+賦值的過程。

宣告提前就是說會把變數以及函式的宣告提到**的頂部。也就是說對於變數,只會提前var a;的宣告部分。

作用域鏈

js中沒有塊級作用域,但有函式作用域

函式在執行的過程中,先從自己內部找變數

如果找不到,再從建立當前函式所在的作用域去找, 以此往上

注意找的是變數的當前的狀態(尤其是變數被多次賦值的時候要注意)

例項

var x = 10;

bar()

function bar()

foo();

}

輸出30,函式內部沒有,故去函式宣告所在的作用域找

var a = 1

function fn1()

function fn3()

var a = 2

return fn3

}var fn = fn1()

fn()

輸出2,宣告fn2()的作用域中a為2

var a = 1

function fn1()

var a = 2

return fn3

}function fn2()

var fn = fn1()

fn()

輸出1,宣告fn2()的作用域中a為1

var a = 1

function fn1()

fn2()

var a = 4

} var a = 2

return fn3

}var fn = fn1()

fn()

輸出 undefined。因為在執行fn2()的時候,a還沒有被賦值,宣告可以提前,而賦值不可以。

作用域 提前宣告和閉包

在es6之前,只有全域性作用域和函式作用域,es6的let和const讓塊級作用域成為可能 全域性作用域 全域性作用域是最大的最根本的作用域,在它上面宣告的變數是全域性變數,可以在任何地方被訪問的,只要沒有被變數覆蓋 函式作用域 存在於函式呼叫的時候,在函式中所有宣告的變數,只有在函式被呼叫的時候才...

JS之作用域鏈以及變數的宣告提公升

var num 80 這是全域性作用域 alert num在外面輸出的為 num 呼叫了全域性作用域的num 值為80 function func func script var num 80alert num在外面輸出的為 num function func func script js中有變數宣...

JS作用域和作用域鏈

什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...