javascript的严格模式是什么_为什么推荐使用它?

严格模式是通过"use strict"启用的运行时约束机制,强制显式声明变量、使this在普通函数中为undefined、禁用with语句等危险语法,且ES模块、class等现代语法默认启用。

JavaScript 严格模式是一种让代码在更规范、更安全环境下执行的机制,通过添加 "use strict" 指令启用。它不是新语法,而是一套运行时约束规则,目的是修复语言早期设计中容易引发 bug 的“宽松”行为。

严格模式强制显式变量声明

在非严格模式下,忘记写 letconstvar 直接赋值,会悄悄创建全局变量,污染全局作用域:

a = 10; // 非严格模式:window.a = 10

严格模式下这会立即报 ReferenceError,逼你养成声明习惯,从源头减少意外全局变量。

严格模式让 this 行为更可预测

普通函数独立调用时,非严格模式下 this 默认指向 window(浏览器)或 global(Node.js),容易导致静默错误;严格模式下则明确为 undefined

function foo() { console.log(this); }foo(); // 严格模式输出 undefined,而非 window

这对调试、类方法绑定、箭头函数理解都更友好,也避免误改全局状态。

严格模式禁用危险或模糊的语法

它直接移除一些已被证明有害或过时的语言特性:

  • 禁止 with 语句——因作用域链不透明,影响性能和可读性
  • 禁止八进制字面量(如 010)——易与十进制混淆
  • 禁止删除变量、函数或不可配置属性(delete x 报错)
  • 禁止使用 evalarguments 作变量名
  • 限制 eval 作用域——内部声明不会泄漏到外层

严格模式已深度融入现代 JavaScript

你不需要手动加 "use strict" 就能享受它的保护:

  • 所有 ES 模块(.mjs 文件或 type="module" 的 script)默认启用严格模式
  • 类(class)、模块脚本、箭头函数所在作用域自动受其约束
  • 现代构建工具(如 Webpack、Vite)和 TypeScript 编译输出也默认遵循严格语义

这意味着,只要用的是模块化开发或主流框架,你已经在严格模式下写了多年代码。