2014-11-20 72 views
-1
var x=10; 
var y=5; 

溶液1不使用第三可變可言,交換X和Y值

x= x + y 
y= x - y 
x= x - y 

溶液2

x=y+x,y=x-y,x=x-y; 

兩種溶液是彼此相等,但第二個是更快,爲什麼?

任何人都可以看到由JS引擎爲這兩個解決方案生成的優化操作碼嗎?

+1

溶液1&解決方案2是相同的代碼。 – 2014-11-20 17:34:49

+0

小心你是否期待整數運算,x和y是v.large幅度 - 因爲x + y可能超過整數範圍。 – GavinBrelstaff 2014-11-20 17:35:58

+0

除此之外,速度可能取決於使用+ =和 - =運算符(它用於C)x + = y; y = x-y; x - = y; – GavinBrelstaff 2014-11-20 17:37:57

回答

0

那麼,在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種方法,懷疑它們是不同的,你應該首先嚐試檢查是否存在與多個測試有較大時間差異

0

我無法找到任何解決方案或使用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; 
}); 

http://jsfiddle.net/6L0d6rpn/

相關問題