var obj = {};
Object.defineProperty(this, 'foo', void (obj.value = 0) || obj);
Object.defineProperty(this, 'foo2', void (obj.value = 1) || obj);
VS
Object.defineProperty(this, 'foo', {value:0});
Object.defineProperty(this, 'foo2', {value:1});
两者似乎都运行得很快,但前者对gc会更好吗?
答案 0 :(得分:1)
选项B创建两个临时对象,而选项A只创建一个。但是,选项B中的临时对象可立即用于GC,并且理论上可以比选项A中的临时对象更容易地进行优化,选项A中的临时对象一直存在,直到您声明它为var
的块结束。
性能几乎没有实际差异;摆弄这个级别是过早的优化(通常不可能在所有浏览器中选择最快的版本)。你应该选择B,这是一个更具可读性和惯用性的JavaScript。
FWIW对我来说(在Ubuntu 13.04 64位上),在5次尝试中测试100k运行导致Firefox或Chrome中的速度都不会更快(即随机噪声大于任何性能差异)。