2025年08月03日
JS核心揭秘:搞懂变量提升、闭包与作用域
JavaScript劝退了多少英雄好汉?很多时候,不是我们不努力,而是被它一些“反直觉”的底层机制绊倒了。“变量提升”、“闭包”、“作用域”,这三座大山,堪称面试官的试金石,也是初学者最头疼的噩梦。今天,我们就把它一次性讲透!### 一、变量的“提前声明”:var的“原罪”与let的救赎你一定写过这样的代码:`console.log(a); var a = 10;` 结果是什么?不是报错,而是`undefined`。这就是“变量提升”。JavaScript引擎在执行代码前,会先把`var`声明的变量“提升”到当前作用域的顶部,但赋值操作留在原地。所以上面的代码等同于:`var a; console.log(a); a = 10;`这种特性极易导致意料之外的BUG。为了解决这个问题,ES6带来了`let`和`const`。它们引入了“块级作用域”的概念(即`{}`内的区域),并且存在“暂时性死区”(TDZ)。在声明`let`变量之前访问它,会直接抛出`ReferenceError`,这更符合我们的编程直觉,也让代码更健壮。### 二、函数的“记忆背包”:无处不在的闭包闭包其实没那么玄乎。简单说,就是一个函数能够“记住”并访问它被创建时所在的作用域,即使它在那个作用域之外被调用。看个例子:
标签:js编程代码大全