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

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

JS中在if else 中定義 function 的問題

JS中在if else 中定義 function 的問題

慕斯王 2019-04-13 08:46:39
代碼如下:(function(){if(true){inner();functioninner(){alert(1);}}else{}})()在IE8-11、chrome、safari中均彈出了alert(1);但是在firefox31.0中提示了innerisnotdefined;但是改成下面這樣就可以了:(function(){if(true){functioninner(){alert(1);}inner();}else{}})()是SpiderMonkey的BUG嗎?再補(bǔ)充一點:(function(){if(true){inner();}else{}functioninner(){alert(1);}})()這樣的話在所有瀏覽器下都是正常的,alert(1)了
查看完整描述

2 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊

console.log(typeoffoo);
functionfoo(){return1;}
console.log(typeoffoo);
上面這段代碼在各個瀏覽器中有一樣的結(jié)果:"function"、"function"。
這是沒有瀏覽器差異的行為,原因是函數(shù)聲明提升(FunctionDeclarationHoisting)。
不明白函數(shù)聲明提升,或者連函數(shù)聲明和函數(shù)表達(dá)式的分別都不太清楚,可以看看湯姆大叔的《揭秘命名函數(shù)表達(dá)式》。
表達(dá)式和聲明存在著十分微妙的差別。函數(shù)聲明會在任何表達(dá)式被解析和求值之前先被解析和求值,即使你的聲明在代碼的最后一行,它也會在同作用域內(nèi)第一個表達(dá)式之前被解析/求值。
console.log(typeoffoo);
if(true){
functionfoo(){return1;}
}
console.log(typeoffoo);
上面這段代碼在Gecko引擎中打印"undefined"、"function";而在其他瀏覽器中則打印"function"、"function"。
原因在于Gecko加入了ECMAScript以外的一個feature:條件式函數(shù)聲明。
Conditionallycreatedfunctions
Functionscanbeconditionallydeclared,thatis,afunctiondeclarationcanbenestedwithinanifstatement.
Note:Althoughthiskindoffunctionlookslikeafunctiondeclaration,itisactuallyanexpression(orstatement),sinceitisnestedwithinanotherstatement.Seedifferencesbetweenfunctiondeclarationsandfunctionexpressions.
注意引用的Note:條件式函數(shù)聲明跟函數(shù)表達(dá)式的處理方式一樣。因此,條件式函數(shù)聲明喪失了函數(shù)聲明提升的特性。
基于以上原因,請不要在你的代碼里將函數(shù)聲明嵌套在條件語句內(nèi)。
                            
查看完整回答
反對 回復(fù) 2019-04-13
?
UYOU

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

ES5之前JS有一個特性叫做聲明提前(具體請自行Google),但是在ES6中已經(jīng)取消了這個"feature"了。所以有可能是Firefox已經(jīng)開始支持ES6了?
                            
查看完整回答
反對 回復(fù) 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 575 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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