0
var obj = {};

Object.defineProperty(this, 'foo', void (obj.value = 0) || obj);
Object.defineProperty(this, 'foo2', void (obj.value = 1) || obj);

对比

Object.defineProperty(this, 'foo', {value:0});
Object.defineProperty(this, 'foo2', {value:1});


两者似乎都运行得一样快,但前者对 gc 会更好吗?

4

1 回答 1

1

选项 B 创建两个临时对象,而选项 A 仅创建一个。但是,选项 B 中的临时对象可以立即进行 GC,并且理论上可以比选项 A 中的临时对象更容易优化掉,选项 A 中的临时对象一直存在到您声明它的块的末尾var

性能上几乎没有实际差异;在这个级别上摆弄是过早的优化(而且通常不可能在所有浏览器中选择最快的版本)。你应该选择选项 B,它是更具可读性和惯用的 JavaScript。

FWIW 对我来说(在 Ubuntu 13.04 64 位上),测试 100k 运行超过五次会导致在 Firefox 或 Chrome 中都没有始终更快(即随机噪声大于任何性能差异)。

于 2013-09-23T22:48:06.373 回答