严格模式通过禁止未声明赋值直接报错来杜绝隐式全局变量;启用需在脚本/函数首行加"use strict"或使用ESM;变量必须用let/const/var声明;配合IIFE、ESM和最小导出可进一步隔离全局作用域。

严格模式通过让“未声明就赋值”直接报错,从源头掐断隐式全局变量的产生路径,从而杜绝全局污染。
严格模式如何拦截隐式全局变量
非严格模式下,count = 10 这类写法会悄悄把 count 挂到全局对象(如 window.count 或 globalThis.count)上,造成污染。严格模式则完全不同:只要没用 let、const 或 var 显式声明,执行时立刻抛出 ReferenceError: count is not defined,不给挂载机会。
必须正确启用严格模式
启用不是可选项,而是生效前提:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 脚本级启用:在
<script>标签内第一行写"use strict";,整段脚本受约束 - 函数级启用:在函数体开头加
"use strict";,仅该函数生效 - ESM 模块(
.mjs或type="module")默认严格,无需手动添加 - CommonJS(Node.js 的
require)和传统 script 标签必须手动加
声明变量必须带关键字
所有新变量都需明确作用域意图:
立即学习“Java免费学习笔记(深入)”;
-
let count = 10;—— 推荐,块级作用域,可修改 -
const user = { name: "Tom" };—— 推荐,块级作用域,引用不可变 -
var oldStyle = "ok";—— 合法但不推荐,存在变量提升和函数作用域问题 -
count = 10;或user.name = "Tom";(user 未声明)—— 严格模式下一律报错
配合封装进一步加固隔离
严格模式本身不创建作用域,它只做“声明安检”。真正守住全局空间,还需主动设计:
- 旧脚本可用 IIFE 包裹:
(function() { "use strict"; /* 代码 */ })(); - 优先使用 ESM:顶层
const/let不挂全局,天然比var安全 - 导出最小接口:模块内部变量完全不暴露,外部只能通过
export显式访问

















