Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能在JavaScript中交换两个变量吗?_Javascript - Fatal编程技术网

为什么可以';我不能在JavaScript中交换两个变量吗?

为什么可以';我不能在JavaScript中交换两个变量吗?,javascript,Javascript,我试图在JavaScript中交换两个变量,但我的代码不起作用。谁能告诉我为什么 我想这应该返回10,5,因为我已经调用了swap函数。但是,它返回5,10 功能交换(a、b){ var-temp=a; a=b; b=温度 } var x=5; 变量y=10; 互换(x,y); 控制台日志(x,y)JavaScript与Java一样,仅通过引用传递。这意味着,虽然函数确实交换了值,但调用范围中的x和y的实际值尚未交换。这里的一个解决方法可能是返回一个交换的值数组: 功能交换(a、b){ 返回

我试图在JavaScript中交换两个变量,但我的代码不起作用。谁能告诉我为什么

我想这应该返回10,5,因为我已经调用了swap函数。但是,它返回5,10

功能交换(a、b){
var-temp=a;
a=b;
b=温度
}
var x=5;
变量y=10;
互换(x,y);

控制台日志(x,y)JavaScript与Java一样,仅通过引用传递。这意味着,虽然函数确实交换了值,但调用范围中的
x
y
的实际值尚未交换。这里的一个解决方法可能是返回一个交换的值数组:

功能交换(a、b){
返回[b,a];
}
var x=5;
变量y=10;
[x,y]=交换(x,y);
console.log(“交换后的x=”+x);

console.log(“交换后的y=”+y)Javascript函数值不是通过引用传递的,而是在a、b中复制值。因此,返回值:

function swap(a, b) {
  return [b, a];
}
稍后获取:

[x, y] = swap(x, y);

您可以使用分解分配方法:

let a = 1;
let b = 2;

[a, b] = [b, a];

a; // => 2
b; // => 1

您可以使用JavaScript的对象来实现这一点,该对象被传递,类似于您在其他语言中可能遇到的传递引用。这允许您做一些使用primitive值不可能做到的事情-

功能参考(值){
返回{value}
}
函数deref(t){
返回t值
}
函数集(t,值){
t、 价值=价值
}
功能交换(a、b){
常数温度=deref(a)
集合(a,deref(b))
设置(b,温度)
}
常数x=ref(3)
常数y=参考(5)
互换(x,y)

console.log(deref(x),deref(y))//5 3
x和y不是通过它们的ref传递的,它们的值是在一个数组中复制的,bJavaScript通过值(或“通过共享”)而不是通过引用传递参数。对象不是通过引用传递的。它们被传递,这是通过值传递的子类别。感谢您提供了技术上正确的术语,尽管wiki说它并不常用。注意,这与编写
var x=5,y=10;[x,y]=[y,x]
。如果您将依赖于解构赋值,则函数没有多大用处。@谢谢您的洞察力。