亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript的詞法作用域

javascript的詞法作用域

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


查看完整回答
反對 回復 2019-04-04
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

更新:

js 在執行前就會解析代碼,此時就聲明并賦值了所有變量,然后才會開始執行。

也就是說,是先把所有變量都準備好,再按代碼的順序來執行。

只要用了 var,那么在當前作用域(及以下作用域中),該變量都是早早就準備好了的,它被賦值的時機早于任何對它的調用行為。


關鍵字:var 變量提升


查看完整回答
反對 回復 2019-04-04
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

變量聲明是提升的
這里相當于調用之前變量已經聲明了(并賦值了)

我說的話不是很清晰~ 補充一下
過程就是 
聲明提升 此時為未定義
在你調用之前執行了賦值語句 (賦值是在調用之前的)


查看完整回答
反對 回復 2019-04-04
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

變量聲明是提升,再執行foo函數,合理的順序;
如果將var b = 2;放在foo();后面,打印結果為undefined

查看完整回答
反對 回復 2019-04-04
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

var變量提升


查看完整回答
反對 回復 2019-04-04
  • 5 回答
  • 0 關注
  • 580 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號