HUWWW
2019-03-20 17:19:37
function foo() { console.log(b)}var b = 2;foo(); //2為什么這里輸出的是2, 是和詞法作用域有關嗎?
5 回答

慕標琳琳
TA貢獻1830條經驗 獲得超9個贊
關鍵字: LHS RHS
var b;
function foo() {
console.log(b)
}
b = 2;
foo(); // console.log(b) 函數作用域是否有b -> 沒有往上找 -> 全局作用域是否有b -> 有 -> 當前值是多少 2

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
更新:
js 在執行前就會解析代碼,此時就聲明并賦值了所有變量,然后才會開始執行。
也就是說,是先把所有變量都準備好,再按代碼的順序來執行。
只要用了 var
,那么在當前作用域(及以下作用域中),該變量都是早早就準備好了的,它被賦值的時機早于任何對它的調用行為。
關鍵字:var 變量提升

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
變量聲明是提升的
這里相當于調用之前變量已經聲明了(并賦值了)
我說的話不是很清晰~ 補充一下
過程就是
聲明提升 此時為未定義
在你調用之前執行了賦值語句 (賦值是在調用之前的)
添加回答
舉報
0/150
提交
取消