严格模式通过禁止隐式创建全局变量、强制显式声明变量、限制this指向全局对象及模块默认启用等机制,有效防止全局命名空间污染。

在严格模式下,JavaScript 会禁止隐式创建全局变量,这是防范全局命名空间污染最直接、最有效的机制。
严格模式自动拦截隐式全局赋值
非严格模式中,直接给未声明的变量赋值(如 foo = 42)会自动在全局对象(window 或 globalThis)上创建属性,造成污染。严格模式下,这会立即抛出 ReferenceError:
use strict'; foo = 42; // ❌ Uncaught ReferenceError: foo is not defined
这意味着你必须显式声明变量,从源头杜绝“意外挂载”。
必须用 var/let/const 显式声明
所有变量都需使用声明关键字,且作用域更清晰:
立即学习“Java免费学习笔记(深入)”;
-
let和const块级作用域,避免函数内变量意外泄露 -
var虽有函数作用域和变量提升,但至少不会挂到全局(除非在全局作用域顶层写) - 禁止省略关键字——哪怕在全局作用域,也应主动写
let count = 0;而非count = 0;
避免 this 指向全局对象
非严格模式下,独立函数调用时 this 指向全局对象,可能误改其属性:
function bad() {
this.name = 'hacker'; // 实际修改 window.name
}
bad();
严格模式中,此类调用的 this 为 undefined,赋值失败,从而防止污染全局对象自身。
模块默认启用严格模式,推荐优先使用
ES 模块(.mjs 文件或 type="module" 的 script)自动以严格模式执行,且天然具备作用域隔离:
- 模块顶层声明的变量、函数仅在本模块可见
- 无默认导出则无法被外部访问,无需手动封装 IIFE
- 配合
export/import,命名空间完全可控


















