JavaScript严格模式通过"use strict"指令启用,必须位于脚本或函数体第一行(仅允许前面有注释或空行),否则无效;启用后禁止隐式全局变量、重复参数、with语句等,提升代码健壮性。

JavaScript 严格模式通过 "use strict" 这个字符串字面量来开启,它不是语句,而是一条“指令”,必须出现在作用域顶部才能生效。开启后,引擎会启用更严格的语法检查和行为限制,让潜在错误在开发阶段就暴露出来。
严格模式的开启方式
有两种有效启用方式,位置和写法都必须准确,否则会被忽略:
-
全局启用:在 .js 文件或 <script> 标签内的第一行(前面只能有注释或空行,不能有任何执行代码)写
"use strict";,整个脚本都受约束 -
函数级启用:在函数体的第一行(不能被 if、for 等块包裹)写
"use strict";,仅该函数内部启用 - ES6 模块自动启用:只要文件使用 import/export,无论是否手动写,都默认处于严格模式
严格模式的核心规范要求
启用后,以下常见操作会被禁止或直接报错,不再是静默容忍:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
变量必须先声明再使用:
x = 10(未用 var/let/const 声明)会抛出 ReferenceError -
禁止重复参数名:函数定义
function foo(a, a) { }在严格模式下是 SyntaxError -
this 不再自动绑定全局对象:普通函数独立调用时,
this是 undefined,而不是 window 或 global -
禁止删除变量、函数或参数:如
delete x或delete myFunc会报 TypeError -
禁用 with 语句:使用
with(obj) { ... }会触发语法错误 - eval 作用域隔离:eval 内部声明的变量不会泄露到外部作用域
容易失效的常见错误
看似写了,但实际没起作用的情况很常见:
立即学习“Java免费学习笔记(深入)”;
- 全局启用时,
"use strict"前面有 console.log()、空行以外的空白符、或任何可执行语句 - 函数内启用时,把它放在 if 块里、或第二行以后,例如:
if (true) { "use strict"; }无效 - 字符串拼写错误,比如写成
"use strict"(少分号)或"use strict;"(带中文分号) - 旧版浏览器不支持,但会安静忽略——这不是错误,只是不生效
为什么建议现在就用
现代项目基本都默认运行在严格模式下(ES6 模块、React/Vue 组件、Node.js 的 ESM),手动加只是补全非模块化场景。它不改变功能逻辑,但能提前拦截三类高频问题:隐式全局污染、this 指向失控、参数/变量拼写失误。这些错误在线上环境往往难以复现和定位,而在严格模式下,它们会在控制台立刻报错。

















