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

严格模式不是新语法,而是“纠错开关”
它不提供新功能,只让 JavaScript 引擎在执行时更较真——把原本悄悄忽略的错误(比如漏写 var、let 就直接赋值)变成明确报错,逼你写出更干净的代码。启用方式就一行:"use strict";,但它必须出现在脚本顶部或函数体第一行,否则无效。
为什么全局加 "use strict" 容易翻车
大型项目里,老代码可能依赖非严格模式的“宽松行为”,比如函数里直接写 a = 10 自动挂到 window 上。一旦整个文件加了严格模式,这类代码立刻报 ReferenceError: a is not defined。所以更稳妥的做法是:
- 新模块/新函数里局部启用:
function handleData() { "use strict"; ... } - 用 IIFE 包裹旧逻辑再开启:
(function() { "use strict"; /* legacy code */ })(); - 现代项目中,打包工具(如 Webpack/Vite)通常默认启用严格模式,无需手动加
几个典型报错场景和对应解法
遇到这些错误别慌,它们其实是严格模式在帮你“提前排雷”:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
-
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.callee 和 caller 被禁用,如果你在调试或旧工具链里依赖它们,得提前替换。另外,eval 的作用域也变了——它不再能访问外层变量,这反而是好事,避免污染。
立即学习“Java免费学习笔记(深入)”;










