多个脚本间共享变量本质是利用同一全局作用域,需显式声明于window或外层作用域,注意执行顺序与污染控制;跨页面需依赖服务端或localstorage等机制,推荐模块化方案。

多个脚本间共享变量,本质是让不同 <script></script> 块或外部 JS 文件能访问同一份数据。关键在于变量的声明位置和作用域范围,而不是“自动互通”——JS 不会自动把所有脚本里的变量拉到一起。
同一页面中多个 <script> 块共享变量</script>
HTML 页面里多个 <script></script> 标签按顺序执行,它们共享同一个全局作用域(即 window 对象)。只要变量在全局作用域声明,后续脚本就能读写它:
- 用
let或const在最外层(<script></script>内部但函数外)声明,比如:let userInfo = null; - 避免不加
var/let/const直接赋值(如token = "abc"),这在严格模式下会报错,且行为不可控 - 注意执行顺序:前一个
<script></script>没执行完,后一个就无法访问它刚声明但还没赋值的变量
不同外部 JS 文件之间共享变量
多个 <script src="a.js"></script> 和 <script src="b.js"></script> 加载后,也运行在同一全局作用域中。所以只要 a.js 里写了 window.apiBase = "https://api.example.com";,b.js 就能直接用 apiBase 或 window.apiBase。
- 推荐统一挂载到命名空间对象上,减少污染,例如:
window.AppConfig = { theme: "dark", timeout: 5000 }; - 确保加载顺序:依赖其他脚本的文件,应放在后面引入;或用
defer属性保证 DOM 解析完成后再执行 - ES6 模块(
type="module")不共享全局变量,需显式export/import,这是更现代、更安全的方式
跨页面或跨浏览器不能靠 JS 变量共享
不同标签页、不同窗口、不同设备上的 JS 环境完全隔离。你在一个页面设了 window.userId = 123,另一个页面打开时这个变量不存在,也不可访问。
-
localStorage和sessionStorage是同源页面内共享的,但仅限当前浏览器实例,不能跨 Chrome/Firefox 或手机/电脑同步 - 真正跨页面/跨设备的数据同步,必须走服务端:前端调 API 存取,由后端统一维护状态
- URL 参数、
postMessage(用于父子窗口通信)、BroadcastChannel(同源多标签页广播)是有限场景下的补充方案
更安全的替代方式(推荐用于项目)
全局变量易冲突、难维护,现代开发中优先用封装性更强的方式:
-
模块化导出导入:在 a.js 中
export const config = {...},b.js 中import { config } from './a.js'; - 单例状态对象:创建一个私有闭包管理状态,只暴露 get/set 方法,避免外部直接修改
- 使用构建工具(如 Vite/Webpack)+ 模块系统,天然支持依赖管理和作用域隔离
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











