函数声明与变量声明到底谁是优先?
同时声明一个标识符a
,一个是变量声明,一个是函数声明,
1 | var a; |
我们知道在JavaScript中存在Hoisting变量提升的概念,遇到以上实例的情况,我们首先得到一个答案,即:在编译词法分析阶段,优先对函数声明进行提升,然后才是变量,询问在同一个作用域的集合中是否存在变量a
,有则忽略,没有则要求作用域中声明一个新的变量a
,然后遇到var a
时被忽略了。(不管如何移动上面的代码都不会影响结果)
在条件句内的”坑”
当我们想去用if
语句来判断执行那个函数时
1 | foo() // ie7 | ie8 => 'b' , Chrome/63.0报错 foo is not a function |
避免在块级内部声明函数。