声明新变量或在函数中使用引用?

时间:2014-12-06 02:33:24

标签: javascript performance function methods

在为类定义方法时,最好是自己使用成员还是将它们分配给新变量使其更快?想象一下,例如在JavaScript中使用以下方法:

square: function() {
    var x = this.x;
    x *= x;
    return x;
}

square: function() {
    this.x *= this.x;
    return this.x;
}

1 个答案:

答案 0 :(得分:0)

一般来说,速度的差异几乎总是可以忽略不计,这意味着这是一个premature optimization,应该避免使用任何更易维护的方法。

但是,在您的特定情况下,两种square方法之间的功能存在重大差异,如下所示。

var a = {
    x: 2,
    square: function() {
        var x = this.x;
        x *= x;
        return x;
    }
}

console.log('Result of a.square():', a.square()); //Output is 4
console.log('After square, a.x is:', a.x); //Output is 2

var b = {
    x: 2,
    square: function() {
        this.x *= this.x;
        return this.x;
    }
}

console.log('Result of b.square():', b.square()); //Output is 4

//The difference is here: b.x will be 4 while a.x is still 2
console.log('After square, b.x is:', b.x); //Output is 4

第一个square方法不会更新this.x,但第二个方法会更新。使用符合您意图的版本。在消除过早优化之后,每种方法的简化版本如下。可维护性的提高是显而易见的。

第一个版本(不更新this.x):

square: function() {
    return this.x * this.x;
}

第二个版本(更新this.x):

square: function() {
    return this.x *= this.x;
}