根本不使用第三个变量,交换X和Y值

时间:2014-11-20 17:29:13

标签: javascript optimization

var x=10;
var y=5;

解决方案1 ​​

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

解决方案2

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

两个解决方案彼此相同,但第二个解决方案更快,为什么?

有人能告诉我JS引擎为这两种解决方案生成的优化操作码吗?

2 个答案:

答案 0 :(得分: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

对于你所拥有的两种方法,怀疑它们是不同的,你应该首先尝试检查多次测试是否存在很大的时间差异

答案 1 :(得分: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/