JavaScript 变量和 let / const 的学习笔记
写 JS 第一件事就是声明变量。教程里说现在别用 var,用 let 和 const,我一开始不明白为什么,直到自己踩了坑。
三者的区别
var a = 1; // 老写法,作用域是整个函数,还能重复声明
let b = 2; // 块级作用域,{} 里声明的外面拿不到
const c = 3; // 块级作用域,赋值后不能再换绑(不能重新赋值)
var 的坑:经典的循环问题
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i); // 打印 3, 3, 3,不是 0, 1, 2
}, 100);
}
for (let j = 0; j < 3; j++) {
setTimeout(function () {
console.log(j); // 正常打印 0, 1, 2
}, 100);
}
因为 var 只有一个共享的 i,循环跑完它变成 3;而 let 每一轮都会创建一个新的 j。这个例子我抄下来跑了好几遍才真正理解。
const 不是"不能变"
一个容易误会的地方:const 阻止的是重新赋值,对象里面的内容还是能改的:
const list = [1, 2, 3];
list.push(4); // 可以,数组内容变了
list = [5]; // 报错,不能重新赋值
我现在的习惯
默认全用 const,确定要重新赋值的才用 let(比如循环计数、累加器),var 基本不碰。这样代码意图更清楚——看到 const 就知道这个名字不会变。
小结
变量是 JS 的地基,理解作用域对后面写事件处理函数帮助很大,那个"点哪个都弹出 20"的坑本质上就是这里的问题。