严格模式是JavaScript中提升代码健壮性的运行模式,通过"use strict"启用,禁止隐式全局变量、重复参数、with语句等危险操作,并使函数中this为undefined,增强错误提示与可维护性。

严格模式(Strict Mode)是 JavaScript 中的一种运行模式,它让引擎以更严格、更规范的方式解析和执行代码,主动禁用一些容易出错或不推荐使用的语法和行为。启用后,原本可能静默失败的操作会抛出明确错误,从而帮助开发者及早发现潜在问题,提升代码健壮性和可维护性。
严格模式如何激活
严格模式可以通过两种方式启用:
- 在脚本顶部添加 "use strict";(整个文件生效)
- 在函数体开头添加 "use strict";(仅该函数及其嵌套作用域生效)
注意:必须是字符串字面量,且必须出现在脚本或函数的最开始位置(前面不能有其他语句,包括注释也不行)。
严格模式阻止的常见危险操作
它会显式报错,而不是容忍错误,比如:
立即学习“Java免费学习笔记(深入)”;
-
未声明就赋值变量:普通模式下
x = 10会隐式创建全局变量;严格模式下直接报ReferenceError -
重复的参数名:如
function foo(a, a) {}在严格模式下是语法错误 -
禁止删除不可配置属性:如
delete Object.prototype会抛出TypeError -
禁止八进制字面量:如
010(旧式写法)在严格模式下无效,需改用0o10 -
禁止使用
with语句:因其影响作用域链、降低性能且易引发歧义
严格模式对 this 的影响
在非严格模式下,函数中独立调用的 this 指向全局对象(浏览器中是 window);严格模式下则为 undefined。这能避免意外修改全局对象,也使箭头函数、call/apply 等行为更可预测。
例如:
function foo() { return this; }
foo(); // 非严格:window;严格:undefined
对代码质量的实际帮助
严格模式本身不提供新功能,但通过“提前拦截错误”,起到类似静态检查的作用:
- 减少因拼写错误、遗漏
var/let/const导致的隐蔽 bug - 促使开发者写出更清晰、更符合现代规范的代码结构
- 让代码更容易被压缩工具(如 Terser)优化,部分严格限制也便于引擎做底层优化
- 与 ES6+ 模块(
import/export)天然兼容——模块代码默认启用严格模式
现代项目基本都默认启用严格模式,尤其在使用构建工具(Webpack、Vite)或 TypeScript 时,无需手动添加,但理解其机制有助于读懂报错和设计更可靠的逻辑。











