我试图在JavaScript中交换两个变量,但我的代码无法正常工作。有人能告诉我原因吗?
我认为这应该返回10, 5,因为我已经调用了swap函数。但实际上,它返回的是5, 10。
function swap(a, b) {
var temp = a;
a = b;
b = temp
}
var x = 5;
var y = 10;
swap(x, y);
console.log(x, y);
我试图在JavaScript中交换两个变量,但我的代码无法正常工作。有人能告诉我原因吗?
我认为这应该返回10, 5,因为我已经调用了swap函数。但实际上,它返回的是5, 10。
function swap(a, b) {
var temp = a;
a = b;
b = temp
}
var x = 5;
var y = 10;
swap(x, y);
console.log(x, y);
JavaScript和Java一样,只支持按引用传递。这意味着虽然您的函数确实交换了值,但在调用范围内,x
和y
的实际值没有被交换。在这里的一个解决方法可能是返回一个数组,其中包含已经交换的值:
function swap(a, b) {
return [b, a];
}
var x = 5;
var y = 10;
[x, y] = swap(x, y);
console.log("x after swap = " + x);
console.log("y after swap = " + y);
[x, y] = swap(x, y);
x
和y
在一行中交换数组的值。var x = 5, y = 10; [x,y] = [y,x]
相同。如果您要依赖解构赋值,那么函数的用处不大。 - Mulanlet a = 1;
let b = 2;
[a, b] = [b, a];
a; // => 2
b; // => 1
function ref (value) {
return { value }
}
function deref (t) {
return t.value
}
function set (t, value) {
t.value = value
}
function swap (a, b) {
const temp = deref(a)
set(a, deref(b))
set(b, temp)
}
const x = ref(3)
const y = ref(5)
swap(x,y)
console.log(deref(x), deref(y)) // 5 3
const box = v => [v]
const unbox = t => t[0]
const set = (t, v) => t[0] = v
function swap (a, b) {
const temp = unbox(a)
set(a, unbox(b))
set(b, temp)
}
const x = box(3)
const y = box(5)
swap(x,y)
console.log(unbox(x), unbox(y)) // 5 3
function swap(a, b) {
return [b, a];
}
[x, y] = swap(x, y);