严格模式通过"use strict"启用,禁用不安全语法、使未声明变量赋值报错、this在普通函数中为undefined、禁止八进制字面量等歧义语法,并约束eval和arguments行为,提升代码安全性与可维护性。
JavaScript 严格模式(Strict Mode)是一种让代码运行在更安全、更规范环境中的机制。它通过在脚本或函数顶部添加 "use strict"; 指令启用,会禁用一些不安全、易出错或已被淘汰的语法和行为,同时让某些静默错误变为显式报错。
在非严格模式下,给未声明的变量赋值会自动创建一个全局变量,这容易引发意外污染和难以排查的 bug。严格模式下,这种操作会直接抛出 ReferenceError。
例如:
非严格模式(不报错,但危险):myVar = 42; // 静默创建全局变量 myVar
"use strict";
myVar = 42; // Uncaught ReferenceError: myVar is not defined
✅ 建议:始终用 let、const 或 var 显式声明变量。
在非严格模式的普通函数中,如果函数独立调用(如 foo()),其内部的 this 会指向全局对象(浏览
器中是 window)。严格模式下,此时 this 为 undefined,避免意外修改全局状态。
✅ 建议:依赖 this 的函数应明确绑定上下文(如用 call、bind 或箭头函数),或确保在对象方法中调用。
严格模式会拒绝以下写法:
010)→ 改用 0o10
function foo(a, a) { })→ 会报 SyntaxError
NaN = 5)→ 报 TypeError
delete Object.prototype)→ 报 TypeError
这些限制帮你提前发现潜在问题,而不是等到运行时才暴露。
严格模式下:
• eval 不再能向外部作用域注入变量;
• arguments 不再与形参自动同步(修改 arguments[0] 不影响对应参数值);
• arguments 和 eval 不能作为变量名或函数名使用。
✅ 这减少了隐式耦合,让代码逻辑更可预测,也利于引擎优化。
严格模式不是“新语言”,而是现有 JavaScript 的增强约束层。现代开发中,模块(.mjs 文件或 ES 模块)默认启用严格模式,无需手动加 "use strict"。即使写普通脚本,也建议主动启用——它不会改变正确代码的行为,只会帮你避开常见陷阱。