什么是javascript严格模式及其作用【教程】

10次阅读

严格模式javaScript的“纠错开关”,不提供新功能但强制报错潜在问题;启用需在脚本或函数首行写”use strict”;全局启用易致老代码报错,推荐局部启用或IIFE包裹;现代打包工具默认支持,主流浏览器兼容良好。

什么是javascript严格模式及其作用【教程】

严格模式不是新语法,而是“纠错开关”

它不提供新功能,只让 javascript 引擎在执行时更较真——把原本悄悄忽略的错误(比如漏写 varlet 就直接赋值)变成明确报错,逼你写出更干净的代码。启用方式就一行:"use strict";,但它必须出现在脚本顶部或函数体第一行,否则无效。

为什么全局加 "use strict" 容易翻车

大型项目里,老代码可能依赖非严格模式的“宽松行为”,比如函数里直接写 a = 10 自动挂到 window 上。一旦整个文件加了严格模式,这类代码立刻报 ReferenceError: a is not defined。所以更稳妥的做法是:

  • 新模块/新函数里局部启用:function handleData() { "use strict"; ... }
  • 用 IIFE 包裹旧逻辑再开启:(function() { "use strict"; /* legacy code */ })();
  • 现代项目中,打包工具(如 webpack/vite)通常默认启用严格模式,无需手动加

几个典型报错场景和对应解法

遇到这些错误别慌,它们其实是严格模式在帮你“提前排雷”:

  • delete x; 报错 → 严格模式禁止删除变量,改用 const/let 控制作用域,或明确清空值(x = undefined
  • function foo(a, a) { } 报错 → 参数名不能重复,检查是否误写了两个同名参数
  • this 在普通函数里是 undefined 而不是 window → 如果需要绑定上下文,显式用 .call().bind() 或箭头函数
  • with (obj) { ... } 报错 → 直接重写逻辑,避免使用 with(它会让作用域链不可预测)

兼容性和实际影响比你想的小

IE10+、chrome 13+、firefox 4+、safari 5.1+ 全都支持,2026 年基本不用考虑降级。真正要注意的是:严格模式下 arguments.calleecaller 被禁用,如果你在调试或旧工具链里依赖它们,得提前替换。另外,eval 的作用域也变了——它不再能访问外层变量,这反而是好事,避免污染。

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

text=ZqhQzanResources