在一般情況下,在速度上的差異幾乎總是可以忽略不計,這意味着這是一個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;
}
您是變異的'this.x'值的第二種情況。在第一種情況下,你不是。 – 2014-12-06 02:36:11
第一個不會比單行更好:'return this.x * this.x;'?這避免了創建額外的變量,並且不執行任何分配。 (正如你已經指出的,你的第二個版本不會做同樣的事情,所以兩者之間的比較沒有意義。) – nnnnnn 2014-12-06 02:47:34