严格模式通过"use strict"启用,强制变量声明、禁止删除不可配置属性、限制函数参数重复、明确this指向、禁用with和八进制语法,提升代码安全与可维护性。

在 JavaScript 中,严格模式("use strict")是一种为代码启用更严格语法检查的机制。它帮助开发者避免一些常见的错误,禁用不安全或不良的行为,并为未来的语言发展铺路。启用严格模式后,JavaScript 引擎会以更严格的规则来解析和执行代码,与非严格模式相比,存在多方面的差异。
变量声明要求更严格
在严格模式下,所有变量必须先声明再使用。如果尝试给未声明的变量赋值,会直接抛出错误。
- 非严格模式:a = 10; 会隐式创建全局变量 a
- 严格模式:a = 10; 抛出 ReferenceError
这种限制防止了意外的全局变量污染,促使开发者显式使用 var、let 或 const 声明变量。
禁止删除不可配置的属性和变量
严格模式限制了 delete 操作符的滥用。
立即学习“Java免费学习笔记(深入)”;
- 非严格模式:可以执行 delete Object.prototype,虽然实际不会删除成功,但不会报错
- 严格模式:对不可删除的属性使用 delete 会抛出 SyntaxError 或 TypeError
- 同样,不允许删除变量名:如 delete x(x 是变量)会报错
这提升了代码的安全性,避免误操作影响关键对象结构。
函数参数和作用域限制
严格模式对函数参数有额外约束。
- 不允许重复的参数名:函数 function f(a, a) { } 在严格模式下会抛出语法错误
- arguments 对象不再与参数绑定:修改 arguments[0] 不会影响对应形参的值
- 禁止在块级作用域中声明函数(某些实现中)
这些变化让函数行为更可预测,减少歧义。
this 指向更明确
在非方法调用场景下,this 的处理方式不同。
这一特性有助于避免因 this 绑定错误导致的 bug,尤其在事件处理或回调中更安全。
禁用部分不推荐的语法
严格模式禁止使用一些被认为危险或过时的语言特性。
- 不能使用 with 语句,会直接报语法错误
- 八进制数字字面量(如 010)被视为非法
- 不能通过 eval 动态创建变量影响外部作用域(eval 中的变量在内部封闭)
这些限制提升了代码的清晰度和可维护性。
基本上就这些。严格模式不是新语言,而是原有 JavaScript 的安全子集。建议在所有现代项目中启用,通常在脚本顶部或函数体顶部添加 "use strict"; 字符串即可。它不复杂但容易忽略,却是写出健壮代码的重要一步。











