2013-08-20 29 views
0

的性能是这样的:的Javascript:“闭包”变量

function Con() { 
    var foo = 42; 
    this.foo = foo 
} 

更慢比这

function Con() { 
    this.foo = 42; 
} 

论的调用返回的对象foo的变量的后续使用' Con'构造函数? 也就是说。如果变量首先存在于构造函数调用的关闭中,它会受到伤害吗?

编辑: @FakeRainBrigand:嗯,在这里你测量使用构造函数构造一个对象的时间。对? 我宁愿想着一个构造对象的后续使用,就像这样:

var myObj = new Con(); 
var bar = myObj.foo; 

什么是时使用的最后一行只(即变量foo的访问),在两种情况下?

+2

很慢,但没有什么会伤害你的表现 –

+0

他们是不等价的。在第一个中你有两个变量。如果'foo'没有被引用(字符串,数字......)传递,那么如果使用'foo',则'foo'和'this.foo'不会同步。如果你使用'this.foo',那么'var foo'不起作用。 – elclanrs

+0

这是那些调用如此微不足道的情况之一,您最好使用对代码可读性更友好的代码,而不是优化代码。 – ars265

回答

3

它稍微慢一些。这是一个performance test。这或多或少可以忽略不计,而且几乎可以肯定的是你应该担心的其他问题。我们每秒可以做6000万次,所以担心你每秒只能做几次。

performance test with code in original question


changed the tests不实际包括制造构造,他们变得更加一致。这可能是由于内部优化。在这里,这两个陷入了错误的边缘。

second performance test

+0

那么,在这里你测量使用构造函数构造一个对象的时间。对? 我宁愿考虑后续使用构造对象,如下所示: var myObj = new Con(); var bar = myObj.foo; 在这两种情况下,*后者语句的使用时间*(即访问变量'foo')是多少? – loldrup