var 的变量提升
代码
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log("i");
}, 1000 * i);
}
// 返回3,3,3
for (let i = 0; i < 3; i++) {
setTimeout(function () {
console.log("i");
}, 1000 * i);
}
// 返回0,1,2
原因- let 在 for 循环的标头中使用,它不仅声明,为每次迭代重新声明了一个新的 i => 当函数运行时,并没有查看同一个变量
let 和 const 的使用场景
-
const
- 常使用在声明函数中
-
let
- 在块作用域中使用时常使用 let
全局变量
- 全局变量不会被回收
- 原因: 为了方便其他地方调用
问题
- 将大多数变量声明在全局作用域中,容易出现的问题
- 会导致内存泄漏
- 可以在任何地方更改 => 难最终
- 容易炒成冲突,引起碰撞
- 阻碍模块化思维