You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何函数内修改的全局变量在外部也生效?代码示例解析

为什么函数内修改num会同时改变全局变量的值?

先看你提供的示例代码:

let num = 50;
 
const logNum = () => {
  num = 100; // Take note of this line of code
  console.log(num);
}
 
logNum(); // Prints 100
console.log(num); // Prints 100

这个结果完全符合JavaScript的作用域规则,Codecademy的示例没有错误。核心原因在于函数内部没有重新声明num变量:

  • 当你在函数里写num = 100时,JavaScript会先在当前函数的局部作用域中查找是否存在名为num的变量。
  • 因为函数内没有用let/const/var声明过num,JS会沿着作用域链向上查找,最终找到全局作用域中用let num = 50声明的变量。
  • 此时的赋值操作直接修改了全局作用域里的num,所以函数内外打印的结果都是100。

如果你想让修改只在函数局部生效,需要在函数内部重新声明num变量,比如:

let num = 50;
 
const logNum = () => {
  let num = 100; // 局部声明num
  console.log(num); // 打印局部的100
}
 
logNum(); 
console.log(num); // 打印全局的50

这种情况下,函数内的num是一个全新的局部变量,和全局的num互不影响,这才是你最初预期的“局部生效”的场景。

内容的提问来源于stack exchange,提问作者nathan-blackburn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:22:04