严格模式是JavaScript的限制性执行环境,通过"use strict"启用,能提前暴露隐性错误、防止意外创建全局变量、禁止静默失败操作、限制易错语法,并为ES6+特性提供兼容性基础。

JavaScript 严格模式(Strict Mode)不是新语言,而是对 JavaScript 的一种限制性执行环境。它通过在脚本或函数顶部添加 "use strict"; 激活,让引擎以更严谨的方式解析和运行代码——这能提前暴露许多隐性错误,避免一些易被忽略但后果严重的陷阱。
防止意外创建全局变量
非严格模式下,给未声明的变量赋值(如 count = 10;)会自动在全局对象(如 window)上创建属性,极易污染全局作用域、引发命名冲突或覆盖已有属性。严格模式下,这种写法直接抛出 ReferenceError,强制开发者显式声明变量(let、const 或 var)。
禁止静默失败的操作
很多操作在非严格模式中“看似成功”,实则无效且不报错,比如给不可写属性赋值、给不可扩展对象添加新属性、删除不可配置属性等。严格模式会让这些操作立即抛出 TypeError,而不是默默忽略,帮助你及时发现对象状态与预期不符的问题。
限制容易出错的语法和行为
严格模式禁用或改变了一些模糊、过时或易混淆的语言特性:
立即学习“Java免费学习笔记(深入)”;
- 禁止使用
with语句(因其动态作用域难以优化且易导致性能与调试问题) - 函数参数名不能重复(
function foo(a, a) { }在严格模式下报错) -
arguments不再与形参自动绑定(修改arguments[0]不再影响参数变量),避免副作用 -
this在非对象上下文中(如普通函数调用)不再指向全局对象,而是undefined,避免因this绑定错误导致逻辑错乱
为现代 JavaScript 提供兼容性基础
ES6+ 的许多特性(如模块、箭头函数、类)默认启用严格模式语义。即使不手动写 "use strict",在模块(.mjs)或类定义中,引擎也会自动进入严格模式。主动启用它,有助于统一开发习惯,减少迁移成本,并让代码行为更接近未来标准。
不复杂但容易忽略:一行声明就能显著提升代码健壮性和可维护性。尤其在团队协作或长期维护项目中,严格模式是低成本、高回报的防御性编程实践。











