var的作用域
var声明的范围是函数作用域,区别于let和const的块级作用域
如下代码执行超时逻辑时,所有的i都是同一个值,所以会导致如下结果,使用块级let声明则不会,因为每次都会迭代声明一个新的变量
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0)
} //输出为3 3 3
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0)
} //输出为0 1 2
let
1.在声明前调用会造成暂时性死区
2.let在全局中声明的变量并不会作为window上的一个属性,var声明的变量会
let dxs = 'dxs';
console.log(dxs) // dxs
console.log(window.dxs) // undefined