let 和 var,const
- let声明的变量只在let所在的代码块有效
{
let a = 2;
var b = 3;
}
console.log(a); //Uncaught ReferenceError: a is not defined
- for循环中,var声明的是全局的,let只在for循环有效
for(var i = 0; i<5;i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
var修饰,打印结果全是5.
for(let i = 0; i<5;i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
打印结果是0,1,2,3,4
- var会发生变量提升,即变量可以在声明之前使用。值是undefined
let不会,声明之前使用会报错
console.log(m); //undefined
var m;
console.log(n); // Uncaught ReferenceError: Cannot access 'n' before initialization
let n = 3;
- 暂时性死区。
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的
if(true) {
tem = '2';
console.log(tem); // Uncaught ReferenceError: Cannot access 'tem' before initialization
let tem;
}
- const声明的变量不得改变值,意味着一旦声明就必须初始化。
const a; // Uncaught SyntaxError: Missing initializer in const declaration
网友评论