1.var、let、const的区别
写在前面:var是ES5语法,let和const是ES6的语法
1.作用域不同
var声明变量时,只有函数作用域和全局作用域,没有块级作用域。
let和const声明变量时,有块级作用域,只能在同一个大括号内部使用,只在块级作用域有效。
2.变量提升
var****有变量提升,变量提升,只提升变量的声明定义,并不能提升赋值。
let和const****没有变量提升:只能在变量声明后才可以用这个变量。声明前都是此变量的“死区”
3.变量的重复声明
var允许重复声明变量,重复赋值时,后面的值会覆盖前面的值。
let和const都不允许重复声明变量。
const声明常量,一旦声明立即初始化赋值,且常量的值不可改变。
4.循环作用域
在for循环中,var声明的是全局作用域,每次循环i会被覆盖,所以每次输出都是循环结束后的值。
而let是块级作用域,每次循环都有单独的作用域,不会被覆盖。
//var
for (var i = 1; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, 300)
}
for (let i = 1; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, 300)
}