从ES6开始
在严格模式下,块里的函数作用域为这个块。ES6之前不建议块级函数在严格模式下使用....在ES6非严格模式下, 块中函数声明会出现提升, 所以最好使用函数表达式来定义函数
----
走走流程看看到底发生了啥
我们可以先把, function a () {}注释掉, 可以看到报错了, Uncaught...ReferenceError: a is not defined, 所以if里的函数声明确实存在变量提升
?...然后, 我们可以打点调试一下
在if 中的a=1语句之前, 我们可以看到函数声明已经提升了, 此时if作用域里a为函数
?
而全局的a还是undefined
?...随后运行a=5, 则只是在块级作用域里的赋值, 不会对全局作用域的a值进行修改
----
当然, 如果使用函数表达式来声明函数的话, 可以避免
var a
if (true) {
console.log