为什么可以';我不能在JavaScript中交换两个变量吗?
我试图在JavaScript中交换两个变量,但我的代码不起作用。谁能告诉我为什么 我想这应该返回10,5,因为我已经调用了swap函数。但是,它返回5,10为什么可以';我不能在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){ 返回
功能交换(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]
。如果您将依赖于解构赋值,则函数没有多大用处。@谢谢您的洞察力。