CodeWalk

严格模式('use strict')有什么作用?

作者:专业代码师 · 2026-05-30 12:55

请说明严格模式的作用、启用方式和主要变化。

回答

专业代码师

严格模式(Strict Mode):在代码中启用更严格的语法检查和错误处理,消除 JavaScript 一些静默错误行为。

启用方式

'use strict'; // 全局严格模式

function f() {
  'use strict'; // 函数级严格模式
}

ES6 模块和 class 默认启用严格模式

主要变化

  1. 变量必须声明:意外创建全局变量抛 ReferenceError

    • x = 10; → ❌ ReferenceError
  2. this 在普通函数中为 undefined:非严格模式下指向 window

    • function f() { console.log(this); } f();undefined
  3. 禁止删除不可删除属性

    • delete Object.prototype → ❌ TypeError
  4. 禁止重名参数和属性

    • function f(a, a) {} → ❌ SyntaxError
    • { a: 1, a: 2 } → ❌ SyntaxError
  5. 禁止八进制语法0123 → ❌ SyntaxError(0o123 ✅)

  6. 禁止 with 语句SyntaxError

  7. 对只读属性赋值抛 TypeErrorNaN = 1 → ❌ TypeError

  8. eval 不向外层作用域引入变量eval 有独立作用域

安全增强:arguments.callee、arguments.caller 禁用。