严格模式下未声明变量会报ReferenceError,通过控制台错误信息定位变量名,检查let/const声明、作用域、拼写、异步闭包及模块导入,配合ESLint和"use strict"验证。

严格模式下未声明变量会直接报 ReferenceError,而不是静默创建全局变量,这是排查的关键突破口。
看控制台报错信息定位变量名
浏览器开发者工具(F12)的 Console 面板会明确提示:
"Uncaught ReferenceError: xxx is not defined"
其中 xxx 就是未声明就使用的变量名。重点检查该变量是否漏写了 let、const 或 var(严格模式下不推荐用 var)。
检查作用域和声明位置
常见情况包括:
- 变量在 if/for/函数内部声明,却在外部访问(块级作用域限制)
- 拼写错误,比如声明了
userName,但使用了username(大小写敏感) - 异步回调中访问了上层未正确闭包捕获的变量
- 模块未正确导入,误以为某个变量已存在
启用 ESLint 等静态检查工具
配置 ESLint 规则可提前发现隐患:
-
"no-undef": "error"—— 禁止使用未声明变量 -
"no-unused-vars": "warn"—— 提示声明了但未使用的变量(避免误删关键声明) - 配合
/* global XXX */注释可显式声明合法的全局变量(如jQuery、process)
快速验证是否为严格模式触发
临时加一行测试代码:
立即学习“Java免费学习笔记(深入)”;
'use strict'; console.log(undeclaredVar); // 直接报错
若去掉 'use strict' 后变成 undefined 而不报错,说明确实是严格模式在起作用。注意:脚本级严格模式需放在文件顶部,函数级则放在函数体第一行。


















