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

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

采用function和賦值語句定義函數,為什么最后采用的都是賦值語句定義的函數?

采用function和賦值語句定義函數,為什么最后采用的都是賦值語句定義的函數?

undertale 2016-07-13 16:34:26
這里輸出是1,為什么? 一個函數被多次定義,后面的定義會覆蓋前面的定義, 而賦值給f,變量提升會提升到文件前面。順序相當于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貢獻128條經驗 獲得超67個贊

你有一點搞錯了,var hoist(var懸?。┲怀霈F在變量中

而function f(){

// 函數體

} 這個叫函數聲明


var f = function(){//函數體} 這個叫函數表達式


函數聲明是在JavaScript一旦進入上下文之后馬上執行的。

因此正確的順序是

  1. 執行函數聲明

  2. 執行函數表達式

  3. 調用函數?

因此輸出的是1

查看完整回答
3 反對 回復 2016-07-13
?
玉林峰

TA貢獻14條經驗 獲得超9個贊

我個人覺得執行順序應該是這樣:

  1. var f????????(聲明提前 f為undefind) ?

  2. function f(){document.write('2')} ? ?(函數聲明,聲明提前)

  3. 執行 var f = function(){document.write('1') ; ?(給 f 賦值)

  4. 調用 f() ? ? ?所以會輸出 1;

查看完整回答
反對 回復 2016-07-14
?
qyy2499760117_葉子

TA貢獻188條經驗 獲得超91個贊

?立即執行匿名函數···?


查看完整回答
反對 回復 2016-07-13
  • 3 回答
  • 0 關注
  • 1816 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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