标准答案
- use strict 会让代码在严格模式下执行,禁止一些容易出错或不安全的行为,让问题更早暴露。
- 常见变化包括:给未声明变量赋值会报错;普通函数直接调用时 this 是 undefined,不会自动指向全局对象;删除不可删除属性会报错;重复参数名、部分八进制写法等会受限制。
- 严格模式的价值是减少隐式全局变量、减少静默失败、让语义更可预测,并为引擎优化和未来语法保留空间。
- ES Module 和 class 默认就是严格模式,所以现代工程里即使不手写 use strict,也经常运行在严格规则下。迁移旧代码时要重点检查隐式全局变量和函数 this。
题目解析
严格模式不是性能开关,也不会自动修复问题。它只是把一些原本静默失败或隐式兜底的行为改成明确报错。
this 行为是高频考点。非严格模式下普通函数直接调用时 this 可能指向全局对象;严格模式下是 undefined,这能避免意外污染全局对象。
模块默认严格模式是现代代码的重要背景。很多项目没有显式写 use strict,但打包后的模块代码仍然按严格规则运行。
代码示例
下面示例展示严格模式下隐式全局变量和普通函数 this 的变化。
JavaScript
'use strict'
function run() {
console.log(this) // undefined
}
run()
function updateUser() {
// name = 'Alice' // ReferenceError,不能创建隐式全局变量
const name = 'Alice'
return name
}常见误区
- 以为 use strict 只影响当前一行。
- 忽略 ES Module 默认严格模式。
- 认为严格模式会自动修复问题。它只是让问题更早报错。