严格模式下变量声明必须显式使用let或const,禁用var;所有变量需初始化,解构变量须声明;全局或函数首行加"use strict"启用,模块默认启用。

在严格模式下规范变量声明,核心是杜绝隐式全局、明确作用域边界、避免静默错误。关键不是“能不能用”,而是“怎么用才安全可靠”。
必须显式声明所有变量
严格模式禁止给未声明的标识符赋值,否则直接抛出 ReferenceError。这意味着不能再写 a = 10 这类代码。
- 所有变量都得用 let 或 const(推荐优先用 const)显式声明
- 函数内部也不允许漏掉声明,哪怕只是临时计数器
- 对象解构、数组解构时,每个被解出来的变量名都要落在声明语句中
按需选择 let 和 const,禁用 var
var 的函数作用域和变量提升容易引发逻辑混乱,在严格模式下虽不报错,但违背现代规范。
- 默认用 const:值不打算重新赋值时(包括对象、数组——注意是引用不可变,内容可变)
- 仅当变量需要后续重新赋值时,才用 let
- 避免 var:它仍会挂到函数作用域顶层,且允许重复声明,与严格模式追求的明确性相悖
声明即初始化,避免 undefined 状态陷阱
虽然语法上 let x; 合法,但留空初始化易导致后续误用或逻辑分支遗漏。
- 声明同时赋予合理初始值,比如
let count = 0、const API_URL = '/api/v1' - 对象/数组也尽量初始化为最小可用结构:
let items = []、const config = {} - 若确实无法立即赋值,考虑是否该拆分逻辑,或用更明确的占位值(如
null)并加注释说明原因
配合 "use strict" 正确启用
严格模式本身不会自动生效,需主动声明,且位置有要求。
- 全局启用:脚本最顶部第一行写
"use strict";(注意是字符串字面量,分号可选但建议保留) - 函数级启用:在函数体第一行写
"use strict";,只对该函数生效 - 模块文件(.mjs 或 import 场景)默认启用严格模式,无需手动加
- 避免放在条件语句或表达式后——那样会被忽略,起不到保护作用


















