讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

updream

一键生成高质量推广成片

Seko
Seko

AI短剧一键生成成片

JavaScript 中全局变量的修改与作用域行为解析

夏强姑娘_3880

夏强姑娘_3880

发布时间:2026-02-05 10:42:01

|

185人浏览过

|

来源于php中文网

原创

JavaScript 中全局变量的修改与作用域行为解析

本文解释为何在函数内修改全局变量后,其新值在函数外部同样生效:因为全局变量只有一个实例,赋值操作会直接改变该变量的值,而非创建局部副本。

在 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免费学习笔记(深入)”;

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • let num = 50 创建了一个块级作用域的全局变量(在模块顶层或脚本顶层,属于全局作用域);
  • 函数内部未用 let/const 重新声明 num,因此所有对 num 的读写都指向同一个绑定;
  • 变量只有一个,值只有一份——50 被覆盖为 100 后,无论从何处访问,结果都是 100。

? 对比:若想让函数内拥有独立的 num,必须显式声明:

let num = 50;

const logNum = () => {
  let num = 100; // ✅ 新建局部变量(同名遮蔽 global num)
  console.log(num); // 100
};

logNum();
console.log(num); // 50 ← 全局 num 未受影响

这种现象称为变量遮蔽(variable shadowing):内层作用域中同名变量会暂时“遮住”外层变量,但二者内存地址不同,互不干扰。

⚠️ 注意事项:

  • 避免无意遮蔽全局变量,易引发隐蔽 bug;
  • 在严格模式下,对未声明变量赋值(如 unknownVar = 42)会抛出 ReferenceError,而本例因 num 已声明,故安全;
  • 使用 const 声明全局配置项可防止意外重赋值,提升代码健壮性。

总结:作用域控制的是变量的可见性与生命周期,而赋值操作本身不创造新变量——除非配合声明关键字。理解“声明 vs 赋值”的本质区别,是掌握 JavaScript 作用域机制的关键一步。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2418

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

5205

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2210

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

20

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

20

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

40

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

40

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn