我想在函数内交换两个全局变量值。
这是我到目前为止所尝试的内容。由于技术原因,我无法更改功能之外的值。我的脚本包含很多代码行,但我无法更改var
s:
var One = 10
var Two = 20
var Three = 30
function altStats(originaleValue, alternativeValue)
{
// Swap logic goes here...
}
altStats(One, Two);
console.log(One); // should be 20
console.log(Two); // should be 10
console.log(Three); // should be 30
答案 0 :(得分:1)
在JavaScript中,参数始终按值传递。你可以传入一个对象并进行交换。
如果这些变量不在tr
之内,你可以用这种方式交换它们。
答案 1 :(得分:1)
如果我真的只能像你说的那样写在函数内部:
var One = 10
var Two = 20
var Three = 30
function altStats(originaleValue, alternativeValue)
{
var app=[One,Two,Three],
result=[];
app.forEach(function(variable){
if(variable===originaleValue)
result.push(alternativeValue);
else if(variable===alternativeValue)
result.push(originaleValue);
else
result.push(variable);
});
One=result[0];
Two=result[1];
Three=result[2];
}
altStats(One, Two);
console.log(One); // 20
console.log(Two); // 10
console.log(Three); // 30
答案 2 :(得分:0)
聪明的伎俩是使用[One, Two] = [Two, One]
。它使用数组将值交换为一行。试试吧:
var One = 10;
var Two = 20;
var Three = 30;
[One, Two] = [Two, One];
console.log("One: "+One); // 20
console.log("Two: "+Two); // 10
console.log("Three: "+Three); // 30

上述代码段仅适用于最近的浏览器,如评论中所述。因此,传统解决方案将是:
var One = 10;
var Two = 20;
var Three = 30;
One = [Two, Two = One][0];
console.log("One: "+One); // 20
console.log("Two: "+Two); // 10
console.log("Three: "+Three); // 30

在这个版本中,我们要做的是使用两个值的数组,第二个将One
的值传递给Two
,第一个是原始值{{1 }}。从该数组中,我们获取第一个Two
元素并设置[0]
的值。有点令人困惑,但如果你花一点时间,你会得到它。
最后,可以使用函数来执行此操作,将数组作为参数,交换其值并返回数组。使用One
调用该函数并将值返回[One, Two]
将完成与上述两种解决方案相同的操作:
[One, Two]

答案 3 :(得分:0)
尝试在函数中执行交换仅将变量传递给您的参数将无效。使用对象。或者不使用函数,因为变量保持在函数范围内。
var One = 10
var Two = 20
var Three = 30
var temp = One;
One = Two;
Two = temp;
console.log(One); // 20
console.log(Two); // 10
console.log(Three); // 30
另一种方法是将对象传递给函数
function swap(obj, original, toSwap) {
var temp = obj[original];
obj[original] = obj[toSwap];
obj[toSwap] = temp;
return obj;
}
var test = {ONE: 10, TWO: 20}
var res = swap(test, 'ONE', 'TWO');
console.log(res); //{ONE: 20, TWO: 10}
答案 4 :(得分:0)
只要您要交换的值是数字,就可以使用这种不需要临时变量的方法:
String binaryString = Integer.toString(num % 2);
while (num >= 2) {
num = (int) num / 2;
binaryString = Integer.toString(num % 2) + binaryString;
}
System.out.println(binaryString);
几乎在任何情况下都不会产生任何相关的差异,但值得知道它是可能的。
答案 5 :(得分:0)
在我写这篇文章的时候已经有了一个公认的答案,但这是一个黑客而且不可靠(参见我对答案的评论)。
所以答案是,你不能做你想要的一般事情。由于JS不通过引用而是通过值传递参数,因此您需要自己引入引用以便能够传递它,例如:
var values = {
One: 10,
Two: 20,
Three: 30
}
function altStats(values, propX, propY) {
var tmp=values[propX];
values[propX]=values[propY];
values[propY]=tmp;
}
altStats(values, "One", "Two");
console.log(values.One); // 20
console.log(values.Two); // 10
console.log(values.Three); // 30