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

JavaScript中变量存储值后传递与直接传值的内存差异是什么?

从内存层面对比“先赋值变量再使用”和“直接使用字面量”的差异

你给出的三个JavaScript代码场景中,两种写法的内存层面差异极小,大部分场景下经过现代JS引擎(如Chrome V8、Node.js所用的引擎)优化后甚至完全没有差异,日常开发不需要为了这点内存开销刻意选择写法,优先以代码可读性、可维护性为判断标准即可。

场景1:对象作为参数传递的两种写法

// 写法1:先赋值变量
var sendResponse = {"a":1,"b":2};
res.send(sendResponse);

// 写法2:直接传递字面量
res.send({"a":1,"b":2});
  • 两种写法在堆内存上都会创建一次对应的对象,这部分内存开销完全一致。
  • 唯一差异是写法1会在当前作用域的栈内存中多创建一个sendResponse引用变量,64位系统下仅占8字节,开销可以完全忽略。
  • 如果你后续还需要用到这个对象,写法1反而更省内存:不需要重复创建相同的对象。

场景2:条件判断中字符串的两种写法

// 写法1:先赋值变量
var valueOne = "hi";
var valueTwo = "hithere";
if (someVariable == valueOne || someVariable == valueTwo) { /* 逻辑 */ }

// 写法2:直接写字面量
if (someVariable == "hithere" || someVariable == "hi") { /* 逻辑 */ }
  • JS引擎默认有字符串驻留优化:相同内容的字符串字面量在内存中只会存储一份,不管你是存到变量还是直接写在判断条件里,"hi"和"hithere"都只会占用一次内存。
  • 两种写法的差异仅为写法1多了两个栈上的字符串引用变量,内存开销可忽略。
  • 建议如果字符串有明确业务含义,优先写法1给变量起有语义的名字,避免魔法字符串降低代码可读性。

场景3:字符串拼接的两种写法

// 写法1:先赋值变量再拼接
var concatOne = "hi";
var concatTwo = "hithere";
var concatString = concatOne + concatTwo;

// 写法2:直接拼接字面量
var concatString = "hi" + "hithere";
  • 现代JS引擎有编译期常量折叠优化:写法2的字面量拼接会在编译阶段直接合并为完整的"hihithere"字符串,运行时不需要额外计算,内存和性能表现反而更优。
  • 如果引擎判断写法1中的concatOne和concatTwo是不可变常量,也会触发同样的优化,最终两种写法效果完全一致。

额外注意

只有当你在循环、高频触发的函数中重复创建相同的对象/字符串时,不缓存到变量直接新建才会产生明显的内存浪费,单次执行的场景完全不需要纠结这两种写法的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:00:04