ES6 Let 与 Const
let命令的基本用法:
{
let a = 0;
a // a=0
}
a //会报 ReferenceError: a is not defined 错误
let 与 var 的区别:
{
let a = 0;
var b = 0;
}
a //会报 ReferenceError: a is not defined 错误
b // b = 0;
当多个同名的变量时
{
let a = 0;
let a = 0; // 会报变量已声明,重复错误
var b = 1;
var b = 4;
}
b // b = 4;
当使用for循环时:
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 输出十个 10
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 输出 0123456789
变量提升:
什么叫提升?
-
提升就是变量还没有被声明,但是我们却可以使用这个未被声明的变量时,这种情况就叫做提升,并且提升的是声明。
console.log(a); //ReferenceError: a is not defined let a = "apple"; console.log(b); //undefined var b = "banana";
-
使用let在没有声明变量之前设置输出语句, a变量会检测到该变量没有声明,因此会报错。
-
使用var在没有声明变量之前设置输出语句,变量 b 存在变量提升,当脚本开始运行的时候,b 已经存在了,但是还没有赋值,所以会输出undefined。
总结:
- let它只是一个局部变量,只能用在当前代码块内,一旦超出改代码块将报错, 当在同一代码块中let不能重复声明,只能声明一次,重复声明会报 Identifier ‘a’ has already been declared 错。(变量已声明)
- var是在全局范围内有效的,允许重复声明,但是重复声明的var会将前一个覆盖
在使用for循环时,为了避免出现不必用的数据结果,建议使用let声明。 - let 不存在变量提升,但是var存在变量提升。