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

JavaScript中不可变性的含义及变量赋值内存机制疑问

JavaScript原始值赋值的内存机制解析
  • 核心结论:'foo'与'bar'处于不同的内存位置,当x被重新赋值为'bar'后,若没有其他引用指向旧值'foo',它会被垃圾回收机制回收。

原因说明

JavaScript的原始值(字符串、数字、布尔值、null、undefined、Symbol、BigInt)本身是不可变的——你无法直接修改一个原始值的内容,比如不能把'foo'直接改成'bar'。

  • 执行let x = 'foo';时,变量x会指向内存中存储'foo'的位置;
  • 执行x = 'bar';时,并非修改'foo'所在内存的内容,而是让x转而指向内存中存储'bar'的新位置。

补充:字符串驻留优化

部分JavaScript引擎会对短字符串做字符串驻留优化——相同的字符串会被存在同一个内存位置。比如如果有另一个变量let y = 'foo';,x和y会共享'foo'的内存地址。但这只是引擎的优化策略,不改变原始值不可变的本质,重新赋值依然是切换变量的指向,而非修改原有值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:04:49