标准答案

  1. use strict 会让代码在严格模式下执行,禁止一些容易出错或不安全的行为,让问题更早暴露。
  2. 常见变化包括:给未声明变量赋值会报错;普通函数直接调用时 this 是 undefined,不会自动指向全局对象;删除不可删除属性会报错;重复参数名、部分八进制写法等会受限制。
  3. 严格模式的价值是减少隐式全局变量、减少静默失败、让语义更可预测,并为引擎优化和未来语法保留空间。
  4. 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 默认严格模式。
  • 认为严格模式会自动修复问题。它只是让问题更早报错。

作者信息