作者broo (陳爺)
看板Ajax
標題[問題] Hoisting 問題
時間Sat Feb 18 23:48:05 2017
範例是這樣的
(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://webptt.com/m.aspx?n=bbs/Ajax/M.1487432887.A.C16.html
※ 編輯: broo (223.140.158.10), 02/18/2017 23:49:10
1F:推 async: 具名函式和匿名函式的差別google一下就有答案了 02/19 00:15
2F:→ ssccg: hoist後的前兩行其實應該是 02/19 00:29
3F:→ ssccg: var test = function test() {return 2;}; 02/19 00:32
4F:→ ssccg: 其中function後的test只是影響這個function的name 02/19 00:32
5F:→ ssccg: test() 是對 var test這個變數呼叫 02/19 00:33
6F:→ broo: 天啊 我完全看不懂...但還是謝謝你們 我研究個 02/19 00:49
7F:→ ssccg: function declaration等效於var定義 + 在compile phase就執 02/19 20:37
8F:→ ssccg: 行一個named function expression assignment 02/19 20:38
9F:→ ssccg: 一個function scope裡不管幾個var、function declaration 02/19 20:40
10F:→ ssccg: 同名字的變數只有一個 02/19 20:41