undertale
2016-07-13 16:34:26
這里輸出是1,為什么?
一個函數(shù)被多次定義,后面的定義會覆蓋前面的定義,
而賦值給f,變量提升會提升到文件前面。順序相當(dāng)于1.var?f;?2.f=function?3.function?f();
所以為什么輸出不是2?
<script>
???var?f=function(){
???????document.write('1');
???};
????function?f(){
????????document.write('2');
????};
????f();
</script>
3 回答
已采納

nickylau82
TA貢獻(xiàn)128條經(jīng)驗 獲得超67個贊
你有一點搞錯了,var hoist(var懸?。┲怀霈F(xiàn)在變量中
而function f(){
// 函數(shù)體
} 這個叫函數(shù)聲明
var f = function(){//函數(shù)體} 這個叫函數(shù)表達(dá)式
函數(shù)聲明是在JavaScript一旦進入上下文之后馬上執(zhí)行的。
因此正確的順序是
執(zhí)行函數(shù)聲明
執(zhí)行函數(shù)表達(dá)式
調(diào)用函數(shù)?
因此輸出的是1

玉林峰
TA貢獻(xiàn)14條經(jīng)驗 獲得超9個贊
我個人覺得執(zhí)行順序應(yīng)該是這樣:
var f????????(聲明提前 f為undefind) ?
function f(){document.write('2')} ? ?(函數(shù)聲明,聲明提前)
執(zhí)行 var f = function(){document.write('1') ; ?(給 f 賦值)
調(diào)用 f() ? ? ?所以會輸出 1;
添加回答
舉報
0/150
提交
取消