测试题
先做道题:
1 | (function(num) { |
知道 js 的变量声明和方法声明提升特性的同学应该都知道,输出肯定不会是 10.
《你不知道的 javascript(上)》中说到:
1 | 函数优先: |
从上得知,那输出结果就是undefine
,是不是被自己的英明神武所折服了,哈哈,那你就错了,结果应该是function(){}
疑问
既然方法优先被提升,那不应该被后面的变量给覆盖吗?
你可以试下下面的 demo
1 | var num = 10; |
结果是 10,不是 undefined;
《JavaScript 高级程序设计》第 7.3 章节又说了:
JavaScript 从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不见(不过,它会执行后续声明中的变量初始化)。
总结
这就解释了第一道题的答案了,既然 num 已经是 function,但后面变量提升,提升并没有初始化,所以被忽略。(提升只是提升声明,初始化不提升)