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

为什么JavaScript中可以将let作为变量名定义或重新赋值?

底层原因

你观察到的let可以被重定义的现象,仅能在JavaScript非严格模式(松散模式)下复现,本质是ECMAScript标准为了向下兼容历史版本做的特殊规则设计,核心逻辑如下:

  • ES3是早期被广泛落地的JavaScript标准,该版本的保留字列表中完全没有let,也就是说在ES3规范中let是合法的普通标识符,大量2015年之前的老代码中存在把let作为变量名使用的逻辑。
  • 2015年发布的ES6(ES2015)正式将let列为关键字,用于块级作用域变量声明。为了避免老代码直接报错无法运行,TC39委员会做了兼容设计:非严格模式下不会把let识别为禁止用作变量名的保留字,仅在严格模式下才会强制将let作为关键字处理,禁止重定义或作为变量名。
  • 你提到的while、const、var等关键字,从ES3开始就属于正式保留字,无论是否开启严格模式都不允许作为变量名或赋值目标,因此无法重定义。

补充验证

你可以在测试代码的第一行添加'use strict'开启严格模式,此时运行你的测试代码会直接抛出语法错误:Uncaught SyntaxError: Unexpected strict mode reserved word,和其他关键字的表现完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:15:00