[問題] javascript 函數的提升

看板Ajax作者 (4545454554)時間8年前 (2016/05/12 16:10), 編輯推噓2(204)
留言6則, 4人參與, 最新討論串1/4 (看更多)
各位好 我是參考這裡的資料 http://fireqqtw.logdown.com/posts/258823-javascript-function-notes function one() { console.log('global one'); } function two() { console.log('global two'); } function hoistFun() { console.log(typeof one); console.log(typeof two); one(); two(); function one() { console.log('local one'); } var two = function() { console.log('local two'); } } --------------------------------------------------------------------- 我不懂的是 two這個函數不是在hoistFun()裡面又被定義一次 為什麼console.log(typeof two); 結果卻是undefined? 另一個問題是 底下這兩種宣告方式 在使用上都是寫 two(); 那到底有什麼差別呢? 謝謝 function two() { console.log('global two'); } var two = function() { console.log('local two'); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.81.14 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1463040600.A.5A7.html

05/12 16:50, , 1F
變數宣告會自動移到函數的開頭,所以two等於是在hoistFun
05/12 16:50, 1F

05/12 16:50, , 2F
的開頭就宣告了,但是在console.log之後才定義內容,
05/12 16:50, 2F

05/12 16:50, , 3F
所以console.log時會顯示為undefined
05/12 16:50, 3F

05/12 20:00, , 4F
可以看一下 JavaScript 的優良部份 有討論這個問題
05/12 20:00, 4F

05/12 20:02, , 5F
大推優良部份 很多讓人confuse的js問題這裡都講了
05/12 20:02, 5F

05/13 15:31, , 6F
謝謝
05/13 15:31, 6F
文章代碼(AID): #1ND3fOMd (Ajax)
文章代碼(AID): #1ND3fOMd (Ajax)