← 返回目录

3. 变量与 var / let / const

变量就是贴了标签的小箱子,程序靠它把东西记在内存里。先点按钮试试"存进去"和"换掉",再看 let/const 到底怎么选。

3.1 互动演示

在左边输入值,点"声明变量并存值"。

3.2 知识点逐条讲解(配合代码)

① 变量 = 贴了标签的小箱子

电脑的内存(存储空间)就像一排储物柜。你想存东西,就申请一个带标签的小箱子,把东西放进去,以后靠标签上的名字拿。

对应关系超好记:数据=物品,变量=小箱子,内存=储物柜,变量名=箱子上的标签。你只要喊标签上的名字(比如 userName),电脑就知道去哪个箱子拿。

// 声明:跟电脑说"给我一个叫 num 的箱子"(此时箱子是空的)
var num;

// 赋值:把东西放进去(= 就是"把右边的东西塞进左边的箱子")
num = 123;

// 初始化:一边要箱子一边就放东西(推荐写法)
var num = 123;

// 重新赋值:把旧东西拿出来,换新的,以最后一次为准
num = 666;
console.log(num); // 666(旧的 123 被冲掉了)
		

② var / let / const 三兄弟(重点中的重点)

老早以前只有 var 一个箱子。后来大家发现 var 有毛病,于是 ES6 时代新增了 let 和 const 来补锅。日常写代码:会变的用 let,固定不变的用 const,别再用 var

var(老,别用)let(推荐)const(常量)
重复声明同名允许,不报错禁止,报错禁止,报错
能不能先不赋值不能,必须一上来就放东西
小括号块 {} 内独立不独立独立(块级作用域)独立
// let 的规矩:同一个地方不能再起同名的箱子
let c = 1;
// let c = 2;  // 报错!已经有个叫 c 的了,别重名

// const 的规矩:箱子一封好就不许整个换掉
const PI = 3.14;
// PI = 3.15; // 报错!基本类型就是把东西直接封在箱子里,换东西=换箱子

// 但是!箱子里装的是"对另一个房间的指引"(对象)时:
const obj = { name: "张三" };
obj.name = "李四"; // 不报错!指引没换,只是进房间把里面东西换了
		

如果你以为 const 就是"里面什么都不能改",那就理解错了。const 锁死的是"箱子上写的那个地址":装的是数字、文字这种"直接封进去"的,就改不了;装的是对象、数组这种"写着另一个房间门牌号"的,门牌号没变,房间里的东西随便换。作业让你把 const 的 goodsBrand 重新赋值,就是为了亲眼看这个报错。

③ 给箱子起名字:规则和规矩

自己起的名字统称标识符(变量名、函数名都算)。硬规则违反就报错,规范则是让人看得懂。

硬规则(违反就报错)例子
只能用字母、数字、下划线 _、$user_name、$price 合法
不能拿数字开头2abc 非法
大小写严格区分app 和 APP 是两个箱子
不能用 JS 自己占的词class、if、for 不能当名字

规范:起个一看就懂的名(别叫 a、b、temp)、主流用小驼峰(myUserName,第一个词小写,后面每个词首字母大写)。注意 my-name 里有横杠,JS 会当成"减号",非法

实战:用在哪 / 常见坑 / 怎么解决

① 可能在什么地方用:用户名用 let 存着;圆周率这种固定值用 const;购物车商品放进数组。

② 常见的问题:给 const 重新赋值报 TypeError;或者变量名打错一个字母,读出来变 undefined

③ 解决思路:报错写着 Assignment to constant 就改成 let;用之前先 console.log 变量名,看看是不是 undefined

一句话记住:变量=贴标签的小箱子;会变用 let、不变用 const、别用 var;const 锁的是门牌号不是房间里的东西;名字要好懂、小驼峰、不能数字开头