JavaScript中的严格模式是一种特殊的运行模式,它会改变JavaScript代码的执行方式,消除语法中的一些静默错误,优化代码的执行效率,同时禁止使用一些未来版本可能会定义的语法。启用严格模式后,代码在运行时会执行更严格的语法检查,帮助开发者提前发现潜在的代码问题。

严格模式的启用方式
严格模式可以全局启用,也可以只在函数内部局部启用,两种方式的写法略有不同。
全局启用严格模式
在脚本文件的最顶部添加use_strict字符串即可全局启用严格模式,注意这行代码必须放在所有其他语句之前,否则不会生效。
// 全局启用严格模式 "use strict"; // 后续所有代码都会按照严格模式执行 var a = 10; console.log(a);
局部启用严格模式
如果只想在某个函数内部启用严格模式,可以在函数的开头添加use_strict字符串,这样只有该函数内部的代码会遵循严格模式的规则。
function test() {
// 函数内局部启用严格模式
"use strict";
var b = 20;
console.log(b);
}
// 函数外部的代码还是普通模式
var c = 30;
console.log(c);严格模式的核心限制规则
严格模式对代码的约束主要体现在以下几个方面,这些限制能有效避免很多常见的编码错误。
变量相关限制
普通模式下,如果给一个未声明的变量赋值,会自动创建一个全局变量,而严格模式下会直接抛出错误。
"use strict"; // 未声明变量直接赋值,严格模式下会报错 x = 10; // ReferenceError: x is not defined
同时严格模式禁止删除不可删除的变量,比如使用var声明的变量或者函数,尝试删除会抛出错误。
"use strict"; var num = 5; delete num; // SyntaxError: Delete of an unqualified identifier in strict mode.
函数相关限制
严格模式下,函数不能有重名的参数,普通模式下重名参数不会报错,后面的参数会覆盖前面的,而严格模式下会直接提示语法错误。
"use strict";
// 函数参数重名,严格模式下报错
function add(a, a) { // SyntaxError: Duplicate parameter name not allowed in strict mode
return a + a;
}另外严格模式下,函数内部的this不再默认指向全局对象,如果函数是普通调用,this的值为undefined,而不是window(浏览器环境)或者global(Node环境)。
"use strict";
function showThis() {
console.log(this);
}
showThis(); // 输出 undefined,普通模式下输出 window语法相关限制
严格模式禁止使用一些不安全的语法,比如with语句,使用with语句会导致严格模式下的语法错误。
"use strict";
var obj = {name: "test"};
// 使用with语句,严格模式下报错
with(obj) { // SyntaxError: Strict mode code may not include a with statement
console.log(name);
}同时严格模式下,八进制字面量也不能使用,普通模式下var num = 0123是合法的八进制写法,严格模式下会抛出错误。
"use strict"; // 八进制字面量,严格模式下报错 var num = 0123; // SyntaxError: Octal literals are not allowed in strict mode.
严格模式的使用建议
建议在所有的JavaScript项目中都启用严格模式,尤其是新写的代码,这样可以提前规避很多隐式错误,让代码更符合规范。如果是维护旧项目,可以逐步在函数级别启用严格模式,避免一次性修改带来的兼容性问题。另外严格模式是向后兼容的,不支持严格模式的旧浏览器会忽略use_strict字符串,不会报错,只是不会执行严格模式的规则,所以启用严格模式不会对旧环境造成负面影响。
| 对比项 | 普通模式 | 严格模式 |
|---|---|---|
| 未声明变量赋值 | 自动创建全局变量 | 抛出ReferenceError |
| 函数参数重名 | 允许,后参数覆盖前参数 | 抛出SyntaxError |
| 函数普通调用的this | 指向全局对象 | 值为undefined |
| with语句 | 允许使用 | 抛出SyntaxError |
严格模式并不是限制开发者的所有操作,而是通过更严格的规则帮助开发者写出更健壮、更易维护的代码,是JavaScript开发中非常实用的特性。
在实际开发中,结合代码检查工具比如ESLint,再配合严格模式,能进一步提升代码的质量,减少线上问题的出现概率。
JavaScript严格模式use_strict语法检查代码规范修改时间:2026-06-03 01:07:08