严格模式下变量必须用let或const显式声明并初始化,禁止隐式赋值和var;块级作用域内声明紧贴使用处;函数参数不可重复,推荐解构赋值。

在 JavaScript 严格模式下,变量声明必须显式、明确,不能依赖隐式行为。核心原则就一条:所有变量必须先声明再使用,否则直接报错,不妥协。
必须用 let 或 const 显式声明
严格模式禁止未声明赋值,所以不能再写 a = 10 这类语句。必须搭配声明关键字:
-
优先用
const:用于值不重新赋值的场景,比如配置项、DOM 元素、函数引用 -
需要重赋值时用
let:比如循环计数器、状态标志、临时计算结果 -
避免使用
var:它仍允许函数作用域提升和重复声明,与严格模式倡导的明确性相悖
声明必须在使用前,且不能留空初始化
虽然 let x; 合法,但严格模式鼓励“声明即初始化”,减少 undefined 引发的逻辑错误:
- ✅ 推荐:
const apiUrl = 'https://api.example.com';、let retryCount = 0; - ⚠️ 不推荐:
let userData;(后续才赋值),容易遗漏或误判初始状态 - ❌ 禁止:
userName = 'Tom';(未声明,严格模式抛出ReferenceError)
注意作用域边界,避免块外访问
let 和 const 是块级作用域,声明位置直接影响可访问范围:
立即学习“Java免费学习笔记(深入)”;
- 在
if、for、{}内声明的变量,外部无法读取 - 不要为了“方便”把变量提到函数顶部声明,应紧贴首次使用处
- 例如:
if (loading) { const spinner = document.getElementById('spin'); spinner.classList.add('active'); }——spinner就该只在这个块里存在
函数参数也要唯一且显式
严格模式下,函数形参不允许重复,这其实是变量声明规范的延伸:
- ❌ 错误:
function fetch(url, url, timeout) { ... }→ 报SyntaxError - ✅ 正确:
function fetch(url, options = {}) { const { timeout = 5000, method = 'GET' } = options; - 建议用解构 + 默认值替代冗余参数,既清晰又符合严格约束


















