全局作用域在页面加载时创建,生命周期持续至页面关闭或刷新;其由浏览器管理,绑定于 browsing context,所有顶层声明的变量和函数均挂载到 window 对象上。

JavaScript 全局作用域的生命周期天然绑定在页面(即 document 所在的 browsing context)上,**只要页面没关闭或刷新,全局作用域就一直存在**,无需手动维持。
全局作用域何时创建?
当浏览器加载 HTML 文档、开始执行 JS(无论是内联脚本还是外部脚本)时,JS 引擎会自动创建一个全局执行上下文(Global Execution Context),其中包含全局对象(浏览器中是 window)、全局 this、以及所有在最外层声明的变量和函数——这些就构成了全局作用域。
为什么它能持续到页面关闭?
因为全局作用域是整个 JS 运行环境的“根”,它的生命周期由宿主环境(浏览器)管理,不是由 JS 代码控制的。只要当前标签页处于活动或后台状态(未被卸载),全局对象及其属性就保留在内存中。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 页面跳转(
location.href = '...')、前进/后退(history API)会触发新文档加载,旧全局作用域被销毁; - 刷新(F5 或
location.reload())会完全重建全局作用域; - 关闭标签页或窗口时,浏览器回收对应 browsing context,全局作用域连同所有变量、事件监听器、定时器等一并释放;
- 单页应用(SPA)中,虽然 URL 和 DOM 变化,但只要不重新加载文档(即不触发
document替换),全局作用域始终延续。
哪些操作可能意外提前“终结”全局变量?
全局作用域本身不会消失,但你存放在其中的数据可能被覆盖或删除:
- 显式赋值为
undefined或null(如window.myData = null); - 用
delete window.xxx删除全局属性(仅对非内置、非var声明的属性有效); - 在严格模式下,给未声明变量赋值不会自动挂到
window上(即不会创建全局属性); - 模块脚本(
<script type="module"></script>)顶层声明的变量默认不在window上,不属于传统全局作用域。
需要长期保存数据?优先考虑更可靠的方式
不要依赖全局变量“撑到页面关闭”来保存关键状态,因为:
- 页面崩溃、意外刷新、Service Worker 接管等情况会让数据丢失;
- 多个脚本可能污染同一全局命名空间;
- 现代开发提倡模块化与最小作用域原则。
推荐替代方案:
– 短期跨组件通信:使用 CustomEvent 或状态管理库;
– 用户偏好类数据:存入 localStorage 或 sessionStorage;
– 需要服务端同步的状态:配合后端 API 持久化。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










