块级作用域(Block Scope):`let` 与 `const` 的引入

好的,各位观众老爷们,大家好!我是你们的老朋友,bug 终结者、代码美容师——程序猿阿Q。今天,咱们要聊一个非常重要,但又经常被大家忽略的话题:块级作用域 (Block Scope),以及 let 和 const 这两位重量级选手的登场。 准备好了吗?让我们一起坐上时光机,回到 JavaScript 的世界,看看作用域的故事是如何演变的! 第一幕:作用域的“前世今生”——var 的独角戏 很久很久以前(其实也没多久,也就十几年),在 JavaScript 的世界里,作用域的定义方式非常简单粗暴,就像一位拿着大喇叭的老村长,嗓门大到整个村子都能听到。那时候,只有函数作用域和全局作用域两种。 用 var 声明的变量,要么是全局变量,要么是函数内部的局部变量。这意味着什么呢?意味着你在 if 语句,for 循环里用 var 声明的变量,会像脱缰的野马一样,跑到整个函数里“撒野”,造成各种意想不到的 bug。 举个栗子🌰: function 老村长的广播() { var 村民 = “张三”; // 老村长宣布:村民是张三 if (true) { var 村民 = “李四”; // 老村长又宣布 …