es5中只有函数作用域和全局作用域,没有块级作用域,会出先问题:
1, 变量提升会导致内层变量会覆盖外层变量,
var i = 5;
function new(){
console.log(i)
if(true) {
var i = 8;
}
}
new()//undefined
2,计数的循环为全局循环
ES6的块级作用域
es6的块级作用域允许任意嵌套。外部作用域无法读到内部作用域的变量。
let i = 2;
{let i = 4}
ES6中的块级作用域,明确允许在块级作用域中声明变量。
ES6中,函数的声明的行为为let, 作用域外就不能引用。
ES6中函数声明可以提到函数作用域的头部。