javascript strict模式是什么_为什么要使用它【教程】

9次阅读

严格模式是通过”use strict”字符串启用的执行规则开关,需置于文件或函数首行且格式正确,能使隐式全局变量、重复参数等错误提前暴露。

javascript strict模式是什么_为什么要使用它【教程】

严格模式不是新语法,而是一行能立刻改变 javaScript 执行规则的开关——"use strict"。它让原本“悄悄通过”的错误(比如漏写 let 就直接赋值)当场报错,而不是污染全局、掩盖问题、等线上崩了才暴露。

怎么启用才真正生效?

看似简单,但写错位置就等于没开:

  • 全局启用:必须是 .js 文件或 标签内的第一行有效语句,前面只能有注释或空行,不能有 console.log() 或任何表达式
  • 函数级启用:必须是函数体内的第一行,且不能被包裹在 iffor 等块中(if (true) { "use strict"; } 无效)
  • "use strict" 必须是字符串字面量——引号、大小写、拼写全要对,'use strict' 也行,但 use strict(没引号)或 "use strict";(分号后换行再写代码)会失效
"use strict"; x = 10; // ReferenceError: x is not defined

为什么现在还值得手动加?

es6 模块(import/export)、class、箭头函数这些现代语法默认启用严格模式,但很多场景仍需你亲手加:

  • 独立的 .js 脚本(比如老项目里的工具函数、统计埋点脚本)
  • 动态生成的代码(如用 eval("") 或拼接字符串执行逻辑)
  • 构建工具未覆盖的 IIFE 包裹代码(webpack/vite 合并多个模块后,"use strict" 若不在合并后文件顶部,就失效)
  • 调试遗留代码时,加一行就能快速暴露 this 绑定错误或隐式全局变量

哪些错误会从“静默”变“炸裂”?

这是严格模式最实在的价值——把模糊行为变成明确报错:

立即学习Java免费学习笔记(深入)”;

  • undeclared = "oops"ReferenceError(不再挂到 window 上)
  • function foo(a, a) { }SyntaxError(参数重复直接不解析)
  • delete Object.prototypeTypeError(不可删属性不再假装成功)
  • with(obj) { }SyntaxError(直接禁用,避免作用域混乱)
  • 普通函数调用:foo() 中的 thiswindow 变成 undefined,防止误改全局状态
"use strict"; function test() {   console.log(this); // undefined(浏览器中) } test();

最容易被忽略的是:严格模式不是“越严越好”,而是“让错误早露脸”。它不改变功能,只改变错误出现的时机和方式。如果你的代码在非严格模式下靠“容错”跑通,那加了 "use strict" 后大概率会立刻报错——这不是模式的问题,是代码本来就有隐患。

text=ZqhQzanResources