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

JavaScript 严格模式是一种让代码在更规范、更安全环境下执行的机制,通过添加 "use strict" 指令启用。它不是新语法,而是一套运行时约束规则,目的是修复语言早期设计中容易引发 bug 的“宽松”行为。
严格模式强制显式变量声明
在非严格模式下,忘记写 let、const 或 var 直接赋值,会悄悄创建全局变量,污染全局作用域:
a = 10; // 非严格模式:window.a = 10
严格模式下这会立即报 ReferenceError,逼你养成声明习惯,从源头减少意外全局变量。
立即学习“Java免费学习笔记(深入)”;
严格模式让 this 行为更可预测
普通函数独立调用时,非严格模式下 this 默认指向 window(浏览器)或 global(Node.js),容易导致静默错误;严格模式下则明确为 undefined:
function foo() { console.log(this); }foo(); // 严格模式输出 undefined,而非 window
这对调试、类方法绑定、箭头函数理解都更友好,也避免误改全局状态。
严格模式禁用危险或模糊的语法
它直接移除一些已被证明有害或过时的语言特性:
- 禁止
with语句——因作用域链不透明,影响性能和可读性 - 禁止八进制字面量(如
010)——易与十进制混淆 - 禁止删除变量、函数或不可配置属性(
delete x报错) - 禁止使用
eval或arguments作变量名 - 限制
eval作用域——内部声明不会泄漏到外层
严格模式已深度融入现代 JavaScript
你不需要手动加 "use strict" 就能享受它的保护:
- 所有 ES 模块(
.mjs文件或type="module"的 script)默认启用严格模式 - 类(
class)、模块脚本、箭头函数所在作用域自动受其约束 - 现代构建工具(如 Webpack、Vite)和 TypeScript 编译输出也默认遵循严格语义
这意味着,只要用的是模块化开发或主流框架,你已经在严格模式下写了多年代码。











