“use strict”是es5引入的严格模式指令,启用后强化语法检查、禁止危险语法、规范this行为、提升代码可维护性与未来兼容性。

“use strict” 是 ECMAScript 5 引入的指令,用于启用 JavaScript 的严格模式。它不是语句,而是一个字符串字面量,在旧引擎中会被忽略,在支持的环境中则触发更严谨的语法检查和运行约束。
让错误提前暴露
未声明就赋值的变量会直接报 ReferenceError,而不是静默创建全局变量;给只读属性、不可扩展对象新增属性、删除不可配置属性等操作,也会在运行时抛出 TypeError。这类原本容易被忽视的问题,现在能立刻定位。
-
"use strict"; x = 1;→ 报错:x 未声明 -
const obj = Object.freeze({a: 1}); obj.a = 2;→ 报错:无法修改冻结对象
禁止危险或模糊的语法
严格模式禁用了一些易引发 bug 或影响性能的写法,比如 with 语句、arguments.callee、八进制字面量(如 010)、重复的函数参数名或对象属性名。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
function f(a, a) { }→ 语法错误:参数名重复 -
var obj = {x: 1, x: 2};→ 语法错误:对象属性重复 -
with(obj) { ... }→ 语法错误:不允许使用 with
规范 this 的行为
非严格模式下,独立函数调用时 this 指向全局对象(如 window);严格模式下,this 为 undefined。这避免了意外污染全局作用域,也使构造函数调用更安全——忘记写 new 时不会默默绑定到全局。
-
function foo() { return this; } foo();→ 非严格返回window,严格返回undefined -
function Person() { this.name = "A"; } Person();→ 严格模式下直接报错,而非把name挂到全局
提升代码可维护性与未来兼容性
严格模式限制 eval 和 arguments 的滥用(例如不能用它们作变量名),使作用域更清晰;同时,ES6+ 的许多特性(如 class、模块)默认启用严格模式,提前适应有助于平滑升级。
-
var eval = 123;→ 报错:eval 是保留标识符 -
function f() { "use strict"; arguments[0] = 99; console.log(arguments[0]); }→ 输出仍是原参数值,arguments不再与形参联动
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










