宣告提前
要明確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在任意的 塊中定義的變數都...