[問題] Hoisting 問題

看板Ajax作者 (陳爺)時間7年前 (2017/02/18 23:48), 7年前編輯推噓1(109)
留言10則, 3人參與, 最新討論串1/3 (看更多)
範例是這樣的 (function(){ var test =function(){return 1;} function test() {return 2;} return test(); })(); 經過hoistibg後會長這樣 (function(){ var test; function test() {return 2;} test = function() {return 1;} return test(); })(); 我怎麼想結果都是2,因為最後是return test()不是嗎??為什麼會是1呢 腦筋無法轉過來.. 麻煩了 手機排版請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.158.10 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1487432887.A.C16.html ※ 編輯: broo (223.140.158.10), 02/18/2017 23:49:10

02/19 00:15, , 1F
具名函式和匿名函式的差別google一下就有答案了
02/19 00:15, 1F

02/19 00:29, , 2F
hoist後的前兩行其實應該是
02/19 00:29, 2F

02/19 00:32, , 3F
var test = function test() {return 2;};
02/19 00:32, 3F

02/19 00:32, , 4F
其中function後的test只是影響這個function的name
02/19 00:32, 4F

02/19 00:33, , 5F
test() 是對 var test這個變數呼叫
02/19 00:33, 5F

02/19 00:49, , 6F
天啊 我完全看不懂...但還是謝謝你們 我研究個
02/19 00:49, 6F

02/19 20:37, , 7F
function declaration等效於var定義 + 在compile phase就執
02/19 20:37, 7F

02/19 20:38, , 8F
行一個named function expression assignment
02/19 20:38, 8F

02/19 20:40, , 9F
一個function scope裡不管幾個var、function declaration
02/19 20:40, 9F

02/19 20:41, , 10F
同名字的變數只有一個
02/19 20:41, 10F
文章代碼(AID): #1Og6otmM (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1Og6otmM (Ajax)