严格模式通过运行时抛出referenceerror拦截未声明变量的赋值,防止隐式创建全局变量;仅对单纯赋值生效,需在函数首行、模块或脚本顶部正确启用,并建议结合eslint等工具增强检测。

在 JavaScript 中,启用严格模式("use strict")后,对未声明变量的赋值会直接抛出 ReferenceError,从而在运行时捕获这类错误,避免意外创建全局变量。
严格模式如何拦截未声明的全局变量赋值
非严格模式下,给一个未声明的变量赋值(如 foo = 42)会自动在全局对象(如 window 或 globalThis)上创建该属性;而严格模式禁止这种隐式全局行为:
- 执行
bar = 100(bar未用var/let/const声明)→ 抛出ReferenceError: bar is not defined - 该检查发生在赋值语句执行时,不是静态分析,所以只有运行到那行才会报错
- 它只作用于“单纯赋值”,不适用于属性访问(如
obj.unknownProp = 1仍合法)
正确启用严格模式的方式
必须确保严格模式在目标代码作用域内生效:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 函数级:在函数体首行写
"use strict",仅对该函数生效 - 模块级:ES6 模块(
.mjs或type="module"的 script)默认启用严格模式,无需手动加 - 脚本级:在
.js文件顶部第一行写"use strict",整个脚本生效(注意:前面不能有空行或注释)
结合开发流程提升检测效果
仅靠运行时严格模式还不够,建议组合使用:
- 用 ESLint 配置
no-undef和no-unused-vars规则,在编辑/提交阶段提前提示未声明变量 - 在测试环境中确保所有代码路径都被执行,否则未覆盖的赋值语句不会触发报错
- 避免在全局作用域大量写逻辑;优先封装进函数或模块,让严格模式更易覆盖
- 注意:严格模式不影响
this绑定或with语句等其他限制,但未声明赋值是其中最常用的安全防护点
不复杂但容易忽略——只要确保严格模式开启且作用域覆盖到位,JavaScript 就会在你写错变量名或漏写 let 时立刻提醒你。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










