作者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/cn.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