第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

js的作用域

js的作用域

富國(guó)滬深 2019-04-21 20:38:00
vara=1;functionb(){a=10;return;functiona(){}}b();console.log(a);控制臺(tái)打出來是1,在b函數(shù)中不是有a=10嗎,這樣聲明是一個(gè)全局變量吧,,為什么打印的是1,是不是在全局這個(gè)范圍找到的a的聲明就不會(huì)去函數(shù)里找a的聲明啦??求解。。謝謝大家
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

JavaScript解釋器中存在一種變量聲明被提升(hoisting)的機(jī)制,也就是說變量
(函數(shù))的聲明會(huì)被提升到作用域的最前面,即使寫代碼的時(shí)候是寫在最后面,也還是
會(huì)被提升至最前面。
例如以下代碼段:
alert(foo);//functionfoo(){}
alert(bar);//undefined
functionfoo(){}
varbar=functionbar_fn(){};
alert(foo);//functionfoo(){}
alert(bar);//functionbar_fn(){}
輸出結(jié)果分別是functionfoo(){}、undefined、functionfoo(){}和function
bar_fn(){}。
可以看到foo的聲明是寫在alert之后,仍然可以被正確調(diào)用,因?yàn)镴avaScript解釋
器會(huì)將其提升到alert前面,而以函數(shù)表達(dá)式創(chuàng)建的函數(shù)bar則不享受此待遇。
那么bar究竟有沒有被提升呢,其實(shí)用var聲明的變量都會(huì)被提升,只不過是被先賦值
為undefined罷了,所以第二個(gè)alert彈出了undefined。
所以,JavaScript引擎執(zhí)行以上代碼的順序可能是這樣的:
創(chuàng)建變量foo和bar,并將它們都賦值為undefined。
創(chuàng)建函數(shù)foo的函數(shù)體,并將其賦值給變量foo。
執(zhí)行前面的兩個(gè)alert。
創(chuàng)建函數(shù)bar_fn,并將其賦值給bar。
執(zhí)行后面的兩個(gè)alert。
注:
嚴(yán)格地說,再JavaScript中創(chuàng)建函數(shù)的話,還有另外一種方法,稱為“函數(shù)構(gòu)造法”:
varfoo=Function('alert("hi!");');
varfoo=newFunction('alert("hi!");');//等同于上面一行
此方法以一個(gè)字符串作為參數(shù)形成函數(shù)體。但是用這種方法,執(zhí)行效率方面會(huì)打折扣,
且似乎無法傳遞參數(shù),所以少用為妙。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-21
  • 2 回答
  • 0 關(guān)注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)