
JavaScript 的严格模式(Strict Mode)是一种让代码在更严格、更安全的环境中运行的机制。它通过在脚本或函数顶部添加 "use strict"; 指令启用,会改变 JavaScript 引擎对代码的解析和执行方式,禁用一些不安全、易出错或已被废弃的语法和行为。
防止意外创建全局变量
在非严格模式下,给未声明的变量赋值会自动创建一个全局变量,这容易引发命名冲突和难以追踪的 bug。
- 非严格模式:
myVar = 42;→ 静默创建window.myVar(浏览器中) - 严格模式:
myVar = 42;→ 抛出ReferenceError,强制开发者先用let、const或var声明
禁止静默失败的操作
很多在非严格模式下“看似成功”但实际无效的操作,在严格模式下会明确报错,提升调试效率。
- 给只读属性赋值(如
Object.defineProperty(obj, 'x', { writable: false })后再改obj.x)→ 抛出TypeError - 删除不可配置属性(
delete obj.prop)→ 抛出TypeError,而非返回false - 八进制字面量(如
010)被禁止,避免因前导零引发的歧义
限制含糊或危险的语法
严格模式移除了容易导致误解的语言特性,推动代码更清晰、可预测。
立即学习“Java免费学习笔记(深入)”;
-
with语句被完全禁止,因为它使作用域链变得不可静态分析 - 函数参数名不能重复(
function foo(a, a) { }→SyntaxError) -
arguments不再与形参绑定(修改arguments[0]不再影响参数变量),避免隐式耦合 -
this在非对象上下文中不再指向全局对象(如普通函数调用中this为undefined),减少意外覆盖全局的情况
为未来语法铺路
严格模式是 ES5 引入的过渡机制,许多新标准(如 ES6+)默认采用严格模式的行为逻辑。启用它有助于提前发现与现代 JavaScript 不兼容的问题,比如保留字作为标识符(let、static、public 等)在严格模式下直接报错,避免升级时踩坑。










