var和let的区别
1.var没有块级作用域,let有块级作用域。
2.var有变量提升,let没有变量提升。
3.var可以重复声明,let不能重复声明。
总的来说,使用let比使用var更严谨。
举几个例子:
for (var i = 0; i < 5; i++) {
}
console.log(i); // 5
for (let j = 0; j < 5; j++) {
}
console.log(j); // 报错 Uncaught ReferenceError: j is not defined
var声明的i有全局作用域,而let声明的j只在for循环内可用(暂时性死区)。
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
if(2>1) {
var a = 10;
}
console.log(a); // 10
if(1>2) {
var b = 5;
}
console.log(b); // undefined
a和b会进行变量提升,然后第一个if满足条件,a的值变为10,第二个if不满足条件,b的值依然为undefined。