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

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

js函數(shù)根據(jù)條件定義時(shí)出問題

js函數(shù)根據(jù)條件定義時(shí)出問題

慕田峪4524236 2019-04-16 20:26:11
在網(wǎng)上看到這樣一段代碼varcondition=true;if(condition){functionsayHi(){alert("Hi!");}}else{functionsayHi(){alert("Yo!");}}sayHi();但結(jié)果卻是yo!為什么呢?
查看完整描述

2 回答

?
海綿寶寶撒

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

functionsayHi(){}這種是函數(shù)聲明式寫法,會(huì)聲明提前,將它置于最接近的環(huán)境中(這里是全局執(zhí)行環(huán)境了)。
而你兩次都是同一個(gè)函數(shù)名,后一個(gè)會(huì)覆蓋前一個(gè)。所以你得到的就是Yo!
你的相當(dāng)于這樣:
functionsayHi(){
alert("Hi!");
}
functionsayHi(){
alert("Yo!");
}
varcondition=true;
if(condition){
}else{
}
sayHi();
是函數(shù)被覆蓋了
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-16
?
SMILET

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

沒猜錯(cuò)的話這段代碼出自于:javascript高級(jí)程序設(shè)計(jì),因?yàn)槲乙部吹竭@里了。下面摘自書上內(nèi)容:
關(guān)于函數(shù)聲明,它的一個(gè)重要特征就是函數(shù)聲明提升(functiondeclarationhoisting),意思是在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明。
表面上看,以上代碼在condition為true時(shí),使用一個(gè)sayHi()的定義;否則就使用另一個(gè)定義。實(shí)際上,這在ECMAScript中屬于無效語(yǔ)法,javascript引擎會(huì)嘗試修正錯(cuò)誤,將其轉(zhuǎn)正為合理的狀態(tài)。但問題是瀏覽器嘗試修正錯(cuò)誤的做法不一致。大多數(shù)瀏覽器會(huì)返回第二個(gè)聲明,忽略condition;Firefox會(huì)在condition為true時(shí)返回第一個(gè)聲明。因此這種使用方式很危險(xiǎn),不應(yīng)該出現(xiàn)在你的代碼中。不過如果使用函數(shù)表達(dá)式,那就沒有問題了。
varsayHi;
varcondition=false;
if(condition){
sayHi=function(){
alert('Hi');
};
}else{
sayHi=function(){
alert('Yo');
};
}
sayHi();//執(zhí)行
純手打,如果對(duì)題主有幫助,很高興。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-16
  • 2 回答
  • 0 關(guān)注
  • 425 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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