1.只在声明的块级作用域里面有效,在外面报错
es5中是没有块级作用域的,所以在{}的外面也能访问到里面的变量
{
var a=6;
}
console.log(a);//输出6
es6有了块级作用域,所以在{}的外面访问会报错
{
let a=6;
}
console.log(a);//referenceError
2.不存在变量提升,只能在声明后使用,否则报错
因为es5存在变量提升(可以参考我以前的文章 [变量提升,函数提升,区块](https://www.jianshu.com/p/a119d46e8e13)),所以下面这种方式写并不会报错
{
console.log(a);//输出undefined
var a=6;
}
es6不存在变量提升,所以相同的写法会报错
{
console.log(a);//referenceError
let a=6;
}
3.不可在同一作用域内重复声明,否则报错
es5可以重复声明,下面的会覆盖上面的
{
var a=5;
var a=6;
console.log(a);//输出6
}
es6不能重复声明
{
let a=5;
let a=6;
console.log(a);
}
SyntaxError: Identifier 'a' has already been declared
网友评论