You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中let与var自动初始化行为差异及let声明等价性疑问

要理解示例2中两种let声明写法的等价性,我们可以结合var的差异对照来看:


1. 先明确var两种写法的差异根源

var存在变量提升且支持重复声明:

  • 仅写var studentName;的重复声明属于无操作,不会覆盖变量已有的值
  • 写var studentName = undefined;的重复声明会执行赋值操作,覆盖原有值
    这是var下两种写法不等价的核心场景。

2. let天然消除了上述差异场景

let不允许同一作用域内重复声明,如果你先写了let studentName = "Suzy",后续再写任何形式的let studentName声明都会直接抛出语法错误,根本不会出现var那种重复声明的场景。


3. 示例2的两种写法执行流程完全一致

你可以分别运行示例2的两个版本:

版本1:隐式赋值undefined

let studentName;
studentName = "Suzy";
console.log(studentName); // Suzy

执行流程:

  • 进入作用域时studentName处于TDZ(临时死区),不可访问
  • 执行到let studentName;语句时,自动给变量赋值undefined完成初始化,退出TDZ
  • 后续赋值、打印逻辑正常执行

版本2:显式赋值undefined

let studentName = undefined;
studentName = "Suzy";
console.log(studentName); // Suzy

执行流程:

  • 进入作用域时studentName处于TDZ,不可访问
  • 执行到let studentName = undefined;语句时,显式给变量赋值undefined完成初始化,退出TDZ
  • 后续赋值、打印逻辑和版本1完全一致

两种写法从TDZ表现、初始化时机、后续操作的结果没有任何区别,这就是二者行为等价的体现。

内容的提问来源于stack exchange,提问作者user51462

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:24:02