JavaScript严格模式是一种特殊的运行模式,它会让JavaScript引擎以更严格的方式解析和执行代码,对常见的不规范语法进行限制,同时引入一些新的语法规则,帮助开发者规避潜在的错误,提升代码的安全性和可维护性。

严格模式的开启方式
严格模式可以通过两种方式开启,分别是全局开启和局部开启。
全局开启
在脚本的最顶部添加use_strict指令即可全局开启严格模式,该模式下整个脚本文件都会遵循严格模式的规则。
// 全局开启严格模式
"use strict";
// 以下代码都会按照严格模式执行
var a = 10;
function test() {
console.log(a);
}
局部开启
如果只想让某个函数内部遵循严格模式,可以将use_strict放在函数的第一行,这样只有该函数内的代码会受严格模式约束。
function normalFunc() {
// 非严格模式
b = 20; // 不会报错,b会成为全局变量
}
function strictFunc() {
"use strict";
// 严格模式下,以下代码会报错
// c = 30; // ReferenceError: c is not defined
}
严格模式的核心特性
严格模式对JavaScript的语法和行为做了多方面的限制,以下是几个最核心的特性。
禁止未声明的变量赋值
非严格模式下,给一个未声明的变量赋值会自动创建全局变量,而严格模式下会直接抛出引用错误。
"use strict"; // 未声明变量直接赋值 x = 100; // ReferenceError: x is not defined
禁止删除不可删除的属性
严格模式下,尝试删除不可配置的属性会抛出错误,而非严格模式下只会静默失败。
"use strict";
var obj = {};
Object.defineProperty(obj, "name", {
value: "test",
configurable: false
});
// 尝试删除不可配置的属性
delete obj.name; // TypeError: Cannot delete property 'name' of #<Object>
函数参数不能重名
非严格模式允许函数参数重名,严格模式下会直接报语法错误。
"use strict";
// 函数参数重名,语法错误
// function add(a, a) { // SyntaxError: Duplicate parameter name not allowed in strict mode
// return a + a;
// }
禁止八进制字面量
严格模式下不允许使用八进制字面量,否则会抛出语法错误。
"use strict"; // 八进制字面量,语法错误 // var num = 0123; // SyntaxError: Octal literals are not allowed in strict mode
eval和arguments的限制
严格模式下,eval不再可以引入新变量到所在作用域,也不能对arguments进行赋值,同时arguments不再和函数参数动态同步。
"use strict";
eval("var evalVar = 10;");
// console.log(evalVar); // ReferenceError: evalVar is not defined
function testArgs(a) {
arguments = [2]; // SyntaxError: Unexpected eval or arguments in strict mode
// arguments[0] = 2; // 严格模式下修改arguments不会影响参数a的值
// console.log(a); // 输出1
}
testArgs(1);
严格模式的其他特性
除了上述核心特性,严格模式还有一些其他的行为变化:
- 严格模式下,函数内部的
this不再默认指向全局对象,未指定this的函数调用中this为undefined - 严格模式下,禁止使用
with语句,否则会抛出语法错误 - 严格模式下,函数声明不能出现在非函数的代码块中,比如
if语句块内 - 严格模式下,
caller和callee属性被禁用,访问会抛出错误
严格模式的应用场景
严格模式适合在以下场景中使用:
- 新开发的项目,默认开启严格模式可以提前规避很多常见的语法错误
- 编写公共库或组件时,在局部函数内开启严格模式,避免影响外部代码
- 重构旧代码时,逐步开启严格模式,排查代码中潜在的不规范写法
需要注意的是,部分旧浏览器可能不支持严格模式,不过现代浏览器都已经完整支持严格模式的相关特性,在项目中合理使用严格模式可以有效提升代码质量。
JavaScript严格模式use_strict语法检查代码规范修改时间:2026-07-22 17:54:26