var x=10;
var y=5;
x= x + y
y= x - y
x= x - y
溶液2
x=y+x,y=x-y,x=x-y;
兩種溶液是彼此相等,但第二個是更快,爲什麼?
任何人都可以看到由JS引擎爲這兩個解決方案生成的優化操作碼嗎?
var x=10;
var y=5;
x= x + y
y= x - y
x= x - y
溶液2
x=y+x,y=x-y,x=x-y;
兩種溶液是彼此相等,但第二個是更快,爲什麼?
任何人都可以看到由JS引擎爲這兩個解決方案生成的優化操作碼嗎?
那麼,在ECMAScript中6,你可以這樣做:
var x=10;
var y=5;
[x,y] = [y,x]
console.log(x,y) // 5, 10
如果不是這樣,這裏已經是一個好辦法:How to swap two variables in JavaScript
至於你有2種方法,懷疑它們是不同的,你應該首先嚐試檢查是否存在與多個測試有較大時間差異
我無法找到任何解決方案或使用XOR的任何有意義的性能差異。非在測試中一貫更快,所以我認爲這個問題的前提是不正確的。
JSLitmus.test('Solution1', function() {
var x = 10;
var y = 5;
x = x + y;
y = x - y;
x = x - y;
});
JSLitmus.test('Solution2', function() {
var x = 10;
var y = 5;
x = y + x, y = x - y, x = x - y;
});
JSLitmus.test('Solution3', function() {
var x = 10;
var y = 5;
x ^= y;
y ^= x;
x ^= y;
});
溶液1&解決方案2是相同的代碼。 – 2014-11-20 17:34:49
小心你是否期待整數運算,x和y是v.large幅度 - 因爲x + y可能超過整數範圍。 – GavinBrelstaff 2014-11-20 17:35:58
除此之外,速度可能取決於使用+ =和 - =運算符(它用於C)x + = y; y = x-y; x - = y; – GavinBrelstaff 2014-11-20 17:37:57