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

为何let与变量名间可使用等号?代码let = x = 5;为何正常运行

为什么let = x = 5;能正常运行?

咱们一步一步拆解这段代码的执行逻辑:

  1. 赋值操作的右结合性:JS里的赋值是从右往左执行的,所以这段代码会先处理x = 5。这里的x没有用任何声明关键字(let/const/var),会被自动挂载到全局作用域,赋值完成后这个表达式的返回值是5。
  2. let被当作标识符使用:接下来执行的是let = 5——这里的let并不是用来声明变量的关键字,而是被JS引擎当作普通变量名(标识符)。在非严格模式下,JS允许使用关键字作为变量名(这是非常不规范的写法,严格模式下会直接报错),所以这一步是把x=5的返回值5赋值给了名为let的全局变量。

再对比let y = x = 5;的区别:

  • let y = x = 5;里的let是正经的声明关键字,用来创建块级作用域变量y,同时把x=5的结果赋值给y;x同样是全局变量。
  • let = x = 5;里的let完全是个变量名,没有任何声明变量的作用,本质上和foo = x = 5;没区别(只是把foo换成了关键字let),最终会得到两个全局变量:x和let,值都是5。

你能看到x的值为5,核心原因是x = 5这一步不受前面错误写法的影响,已经完成了全局赋值。

内容的提问来源于stack exchange,提问作者Mr.Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:10:30