在返回新(临时)对象时,我一直想知道JavaScript中的内存使用和垃圾收集。假设我有一个返回多个值的函数:
function foo() {
return { a: 0, b: 1, c: 2 };
}
每次调用函数时都会创建一个新的Object。现在,如果我只对返回值感兴趣,我真的不需要那个对象,所以我想到了一个不同的模式:
function bar(result) {
result.a = 0;
result.b = 1;
result.c = 2;
}
理论上,bar应该在foo上节省一些内存。事实上,我在现实世界的应用程序中看过几次这种模式,例如在three.js中,Ray类中有“optionalTarget”参数,因此函数不必在内部创建新向量,而是将结果设置在目标上(Ray.js source)。
然而,在摆弄自定义基准后,我在实践中找不到任何差异。我是基准Javascript的新手,所以问题是:你能创建一个令人信服的基准来显示差异,如果有的话?如果没有,这是否意味着垃圾收集器足够聪明,可以立即丢弃对象?