[问题] 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