Javascript 在根本不使用第三个变量的情况下,交换X和Y值

Javascript 在根本不使用第三个变量的情况下,交换X和Y值,javascript,optimization,Javascript,Optimization,解决方案1 var x=10; var y=5; 解决方案2 x= x + y y= x - y x= x - y 这两个解决方案是相等的,但第二个更快,为什么 有人能告诉我JS engine为这两种解决方案生成的优化操作码吗?在Ecmascript 6中,您可以执行以下操作: x=y+x,y=x-y,x=x-y; 如果不是,这里已经有一个好方法: 对于您所拥有的两种方法,如果怀疑它们是否不同,您应该首先尝试使用多个测试检查是否存在较大的时间差异对于解决方案或使用XOR,我找不到任何

解决方案1

var x=10;
var y=5;
解决方案2

x= x + y 
y= x - y 
x= x - y 
这两个解决方案是相等的,但第二个更快,为什么


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

在Ecmascript 6中,您可以执行以下操作:

x=y+x,y=x-y,x=x-y;
如果不是,这里已经有一个好方法:


对于您所拥有的两种方法,如果怀疑它们是否不同,您应该首先尝试使用多个测试检查是否存在较大的时间差异

对于解决方案或使用XOR,我找不到任何有意义的性能差异。不在测试中的人总是更快,所以我假设问题的前提是不正确的

var x=10;
var y=5;

[x,y] = [y,x]
console.log(x,y) // 5, 10

解决方案1和解决方案2是相同的代码。请注意,如果您希望使用整数运算,并且x和y的大小为v,因为x+y可能会超过整数范围。除此之外,速度可能取决于使用+=和-=运算符(在C中使用)x+=y;y=x-y;x-=y;正如所料,断言一个人更快是完全错误的:不,这不是一个重复的。实际上阅读上面的问题,它是关于优化的,为什么会比另一个更快。(这是错误的,但不是重复的。)
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;
});