严格模式是javascript防止隐式全局变量污染最直接有效的机制,通过语法硬约束使未声明赋值立即报错,需手动启用(脚本级或函数级),esm默认启用,变量必须显式声明,配合iife、esm和最小导出可进一步隔离作用域。

严格模式是 JavaScript 中防止隐式全局变量污染最直接有效的机制。它不靠猜测或约定,而是通过语法层面的硬性约束,让“未声明就赋值”这种操作在运行时立即报错,而不是悄悄挂到 window 或 globalThis 上。
启用严格模式是前提
没有启用,一切防护都无效:
- 脚本级启用:在
<script></script>标签内第一行写"use strict";,整段脚本受约束 - 函数级启用:在函数体开头加
"use strict";,只对该函数生效 - ESM 模块(
.mjs文件或<script type="module"></script>)默认启用,无需手动添加 - CommonJS(如 Node.js 的
require)和传统 script 必须手动加
变量必须显式声明才允许赋值
严格模式下,任何未声明就使用的变量名都会触发 ReferenceError:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
count = 10;→ 报错:不是未定义,而是根本没声明过 -
user.name = "Tom";(user未声明)→ 同样报错 -
this.value = 42;(普通函数中调用且this为undefined)→ 抛出TypeError - 正确写法只有:
let count = 10;、const user = { name: "Tom" };、或(不推荐但合法)var oldStyle = "ok";
配合封装进一步隔离作用域
严格模式本身不创建新作用域,它只是给变量声明加一道“安检门”。真正守住全局空间,还得靠主动设计:
- 旧脚本可用 IIFE 包裹:
(function() { "use strict"; /* 你的代码 */ })(); - 优先使用 ESM:顶层
const/let不挂全局,天然比var安全 - 导出最小接口:模块内部变量完全不暴露,外部只能通过显式命名导入或调用
- 避免
with和eval:它们被严格模式禁用,防止动态绑定绕过作用域控制
不复杂但容易忽略:严格模式不是万能作用域生成器,它只确保“每次赋值前你必须想清楚怎么声明”。污染防得住,靠的是这个习惯,而不是一行指令。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










