function swap(x,y){
var t=x;
x=y;
y=t;
}
这不会奏效。当您swap(a,b)
,变量a
和b
被复制到函数中时,该函数中发生的任何事情都不会影响a
和{{1}的实际值}}。我想要这样的东西:
b
怎么做?
答案 0 :(得分:8)
如果您使用的是最新版本的JavaScript(ES2015),那么您可以使用名为“destructuring”的新语言功能。你不需要一个功能。它看起来像这样:
let a = 1;
let b = 2;
// swap!
[b, a] = [a, b];
如果你想要一个功能,你可以这样做:
function swap(a, b) {
return [b, a]
}
[a, b] = swap(a, b);
看看这段代码,我更喜欢这个函数,虽然它有点多余。我喜欢它的表现力。你不会对代码的作用感到困惑。
答案 1 :(得分:2)
你做不到。即使在对象的情况下,参数也是passed by value。它只是为它们传递的值是对象的引用。
基本上这意味着您收到的任何参数都与您传入的原始变量没有实际连接,除非它们可以共享引用。
想象一下,你已经在一张纸上写了a
和b
。在JS中,与函数共享这些值的唯一方法是将它们复制到不同的纸上并将其交给函数。因此,即使该功能在新纸上划出a
并将其替换为b
,也不会改变您在原始纸张上所写的内容。
简而言之,无法更改用作函数参数的变量的值。
答案 2 :(得分:0)
你可以设置一个超出函数范围的变量,这样你就可以在函数内部使用它,这是你可以做的事情:
<head>
<script>var x=0, y=1;</script>
</head>
<script>
function swap()
{
var t = x;
x = y;
y = t;
}
</script>
甚至可以这样做
<script>
var x=0; y=1;
function swap(id1, id2)
{
var t = x;
x = y;
y = t;
}
console.log(x+" "+y);
</script>
我使用了很多并且工作正常。 x
和y
可以从任何地方获取,并且在函数内部工作没问题。
你也可以做
function(id1, id2)
{
x=document.getElementById(id1);
y=document.getElementById(id2);
var t = x.value;
x.value = y.value;
y.value = t;
}
答案 3 :(得分:0)
如上面的答案所述,参数仅按值传递。如果你真的需要实现交换,可以使用2变量算法:
var a = 10, b = 20;
a = a + b;
b = a - b;
a = a - b;
console.log (a+" "+b); // 20 10
答案 4 :(得分:0)
function swap(value) {
value.first = value.first + value.second;
value.second = value.first - value.second;
value.first = value.first - value.second;
}
// declared an object named value which has two keys - first and second corresponding to the first and the second values respectively
var value = {
first: 1,
second: 2
}
console.log(value.first, value.second) // prints 1 2
swap(value);
console.log(value.first, value.second); // prints 2 1