[問題] Hoisting 問題

作者: broo (陳爺)   2017-02-18 23:48:05
範例是這樣的
(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呢
腦筋無法轉過來..
麻煩了 手機排版請見諒
作者: async (非同步)   2017-02-19 00:15:00
具名函式和匿名函式的差別google一下就有答案了
作者: ssccg (23)   2017-02-19 00:29:00
hoist後的前兩行其實應該是var test = function test() {return 2;};其中function後的test只是影響這個function的nametest() 是對 var test這個變數呼叫
作者: broo (陳爺)   2017-02-19 00:49:00
天啊 我完全看不懂...但還是謝謝你們 我研究個
作者: ssccg (23)   2017-02-19 20:37:00
function declaration等效於var定義 + 在compile phase就執行一個named function expression assignment一個function scope裡不管幾個var、function declaration同名字的變數只有一個

Links booklink

Contact Us: admin [ a t ] ucptt.com