JavaScript 中全局变量的修改与作用域真相-js教程

本文详解为何在函数内修改全局变量后,其新值会持续影响全局作用域——关键在于变量唯一性与作用域链查找机制,而非“局部副本”存在。

在 JavaScript 中,let num = 50 声明了一个全局作用域下的块级变量(在模块顶层或浏览器全局对象下),它在整个脚本生命周期中只有一个实例。当箭头函数 logNum 内执行 num = 100 时,并未创建新变量,而是直接更新了这个唯一的全局 num。因此后续 console.log(num) 自然输出 100——这不是“泄漏”或“意外”,而是 JavaScript 作用域规则的准确体现:在当前作用域未声明同名变量时,赋值操作会沿作用域链向上查找并修改最近的可写绑定。

✅ 正确理解的关键点:

  • 全局变量 num 是单例,不存在“函数内一份、函数外一份”的副本;
  • num = 100 是赋值(assignment),不是声明(declaration);只有 let/const/var 关键字才创建新绑定;
  • 若想在函数内隔离变量,必须显式用 let num = … 重新声明——此时创建的是全新的局部变量,与全局 num 完全无关。

下面对比两种情形:

// 情形一:修改全局变量(原例)
let num = 50;
const logNum = () => {
  num = 100; // ✅ 查找并更新全局 num
  console.log(num); // 100
};
logNum();
console.log(num); // 100 ← 全局值已改变

// 情形二:声明局部变量(遮蔽全局)
let num = 50;
const logNum = () => {
  let num = 50; // ✅ 新建局部 num(遮蔽 global num)
  num = 100;
  console.log(num); // 100(局部)
};
logNum();
console.log(num); // 50 ← 全局 num 未受影响

⚠️ 注意事项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » JavaScript 中全局变量的修改与作用域真相-js教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4015958+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4015958+
  • 本周更新: 0+
  • 最后更新: 2026-03-16