严格模式通过禁止隐式全局变量生成来提升代码安全性,未声明就赋值会立即抛出ReferenceError;需在脚本顶部或函数首行写"use strict"启用,模块文件默认启用。

严格模式通过“不让代码悄悄运行”的方式,直接阻止隐式全局变量生成。核心机制是:未声明就赋值,立刻报错,不给挂到 window 或 globalThis 的机会。
启用严格模式是前提
必须在作用域顶部写 "use strict"(注意是 use,不是 user)。可以放在整个脚本最开头(全局严格模式),也可以放在函数体第一行(局部严格模式):
- 全局启用:必须是脚本第一行,否则无效;旧版 IE10 之前会忽略,无副作用
- 函数内启用:只影响该函数及其嵌套函数,不影响外部作用域
未声明赋值直接抛出 ReferenceError
非严格模式下,count = 10 会自动变成 window.count = 10;严格模式下,这行代码执行时立即中断,并提示 ReferenceError: count is not defined。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不管是在全局、函数内,还是嵌套作用域中,只要没用
let/const/var声明,就报错 - 错误信息明确,调用栈清晰,能快速定位漏声明的位置
配合显式声明习惯才真正生效
严格模式本身不自动声明变量,它只是“守门人”。你仍需主动选择声明方式:
立即学习“Java免费学习笔记(深入)”;
- 优先用
const和let,避免提升和重复声明问题 - 不用
var在顶层声明,否则仍会挂到window上(如var x = 1→window.x) - 模块文件(.mjs)默认启用严格模式,无需手动加
"use strict"
其他辅助手段增强防护
严格模式是基础防线,但可叠加使用以下方式进一步降低风险:
- 用 ESLint 配置
no-implicit-globals规则,提前发现未声明赋值 - 采用 ES 模块(
type="module"或 .mjs),天然隔离全局作用域 - 避免 IIFE 过度使用,现代项目更推荐模块化封装而非手动闭包

















