js高级程序设计 第三章 语言基础

95 阅读1分钟

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