本文解释为何在函数内修改全局变量后,其新值在函数外部同样生效:因为全局变量只有一个实例,赋值操作会直接改变该变量的值,而非创建局部副本。
在 JavaScript 中,变量的作用域决定了它在哪里被声明和在哪里可被访问,但并不意味着变量值会“自动复制”或“隔离更新”。关键在于:变量是否被重新声明(let/const/var),而非是否在函数内被赋值。
回到你的示例:
let num = 50;
const logNum = () => {
num = 100; // ⚠️ 没有使用 let/const,这是对全局 num 的直接赋值
console.log(num);
};
logNum(); // 输出: 100
console.log(num); // 输出: 100
这里 num = 100 并未声明新变量(没有 let、const 或 var),因此 JavaScript 引擎会沿作用域链向上查找——发现外层存在一个 let num 声明(全局作用域),于是直接更新该变量的值。这不是“局部更新”,而是“全局更新”。
✅ 正确理解:
立即学习“Java免费学习笔记(深入)”;