ES Modules 默认启用严格模式,无需且不应添加"use strict";所有模块代码自动以严格模式执行,顶层this为undefined、禁止隐式创建全局变量等行为均受约束。

ES Modules 中无需手动开启严格模式——所有模块代码默认就在严格模式下执行。
模块自动启用严格模式
只要使用 import 或 export,该文件即被识别为 ES 模块,引擎会自动以严格模式解析和运行其中全部代码。即使没写 "use strict",以下行为也受严格模式约束:
-
this 在顶层函数或箭头函数中为
undefined(非window或globalThis) - 禁止隐式创建全局变量(如直接赋值
foo = 123会报ReferenceError) - 禁止删除不可配置属性(
delete obj.prop报错) - 禁止八进制字面量(如
010)、重复参数名(function(a, a) {})等不安全语法
不需要也不建议加 "use strict"
在 type="module" 的脚本或任何含 export/import 的 .js 文件中,"use strict" 指令会被忽略。它既无作用,也无必要。保留它可能误导协作者以为“这是可选的”,而实际是强制生效的。
注意非模块脚本的差异
普通 <script>(无 type="module")或 CommonJS 模块(Node.js 中的 .cjs)默认是非严格模式。若想在这些环境中获得相同行为,才需显式添加 "use strict"。但一旦迁移到 ESM,就自然获得更安全、更一致的执行环境。
立即学习“Java免费学习笔记(深入)”;
验证是否处于严格模式
可在模块内快速检测:
console.log(this === undefined); // true(严格模式下顶层 this 是 undefined)
或检查是否允许静默失败操作:
try {
undeclaredVar = 'test'; // 不会静默创建全局变量
} catch (e) {
console.log(e instanceof ReferenceError); // true
}
本质上,ES Modules 和严格模式是绑定设计:这是语言级保障,不是可选项。


















