Javascript 在函数内交换两个全局JS变量

Javascript 在函数内交换两个全局JS变量,javascript,jquery,Javascript,Jquery,我想交换函数中的两个全局变量值 以下是我到目前为止所做的尝试。由于技术原因,我无法更改函数外部的值。我的脚本包含很多行代码,但我无法更改我的vars: var One = 10 var Two = 20 var Three = 30 function altStats(originaleValue, alternativeValue) { // Swap logic goes here... } altStats(One, Two); console.log(One); // shou

我想交换函数中的两个全局变量值

以下是我到目前为止所做的尝试。由于技术原因,我无法更改函数外部的值。我的脚本包含很多行代码,但我无法更改我的
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
ECMAScript 6解决方案 一个聪明的技巧是使用
[One,Two]=[Two,One]
。它使用数组交换一行中的值。试试看:

var-One=10;
Var2=20;
var三=30;
[1,2]=[2,1];
console.log(“一个:+一个);//20
console.log(“两个:+两个);//10
console.log(“三:+三”);//30
ECMAScript 6解决方案 一个聪明的技巧是使用
[One,Two]=[Two,One]
。它使用数组交换一行中的值。试试看:

var-One=10;
Var2=20;
var三=30;
[1,2]=[2,1];
console.log(“一个:+一个);//20
console.log(“两个:+两个);//10

console.log(“三:+三”);//30在JavaScript中,参数总是按值传递。您可以传入一个对象并进行交换


如果这些变量不在
窗口中
,您可以通过这种方式交换它们。

参数在JavaScript中总是按值传递。您可以传入一个对象并进行交换


如果这些变量不在
窗口中
,您可以通过这种方式进行交换。

尝试在函数中进行交换,仅将变量传递给参数将不起作用。使用一个对象。或者不要使用函数,因为变量保持在函数范围内

var One=10
变量二=20
变量三=30
var-temp=1;
一等于二;
二=温度;
console.log(一个);//20
console.log(两个);//10

console.log(三个);//30
尝试在函数中进行交换仅将变量传递给参数无效。使用一个对象。或者不要使用函数,因为变量保持在函数范围内

var One=10
变量二=20
变量三=30
var-temp=1;
一等于二;
二=温度;
console.log(一个);//20
console.log(两个);//10

console.log(三个);//30
只要要交换的值是数字,就可以使用这种不需要临时变量的方法:

One = One + Two; //One = 30, Two = 20
Two = One - Two; //One = 30, Two = 10
One = One - Two; //One = 20, Two = 10

几乎在任何情况下都不会产生任何相关差异,但值得知道这是可能的。

只要要交换的值是数字,就可以使用这种不需要临时变量的方法:

One = One + Two; //One = 30, Two = 20
Two = One - Two; //One = 30, Two = 10
One = One - Two; //One = 20, Two = 10

几乎在任何情况下都不会产生任何相关的差异,但值得知道这是可能的。

如果我真的可以像您所说的那样只在函数内部编写:

var One=10
变量二=20
变量三=30
函数altStats(原始值、可选值)
{
var-app=[1,2,3],
结果=[];
app.forEach(函数(变量){
if(变量===原始值)
结果。推送(可选值);
else if(变量===可选值)
结果推送(原始值);
其他的
结果:推送(变量);
});
一=结果[0];
二=结果[1];
三=结果[2];
}
altStats(一、二);
console.log(一个);//20
console.log(两个);//10

console.log(三个);//30
如果我真的能像你说的那样只在函数内部写:

var One=10
变量二=20
变量三=30
函数altStats(原始值、可选值)
{
var-app=[1,2,3],
结果=[];
app.forEach(函数(变量){
if(变量===原始值)
结果。推送(可选值);
else if(变量===可选值)
结果推送(原始值);
其他的
结果:推送(变量);
});
一=结果[0];
二=结果[1];
三=结果[2];
}
altStats(一、二);
console.log(一个);//20
console.log(两个);//10

console.log(三个);//30
在我写这篇文章时,已经有了一个公认的答案,但这是一个黑客行为,不可靠(参见我对答案的评论)

所以答案是,你不能做你想做的事情。由于JS不是通过引用传递参数,而是通过值传递参数,因此您需要自己引入引用,以便能够传递参数,例如:

var值={
一:十,,
二:二十,,
三点半
}
函数altStats(值、属性、属性){
var tmp=价值[propX];
值[propX]=值[propY];
值[propY]=tmp;
}
altStats(值“一”、“二”);
console.log(values.One);//20
console.log(value.Two);//10

console.log(value.Three);//30
在我写这篇文章时,已经有了一个公认的答案,但这是一个黑客行为,不可靠(参见我对答案的评论)

所以答案是,你不能做你想做的事情。由于JS不是通过引用传递参数,而是通过值传递参数,因此您需要自己引入引用,以便能够传递参数,例如:

var值={
一:十,,
二:二十,,
三点半
}
函数altStats(值、属性、属性){
var tmp=价值[propX];
值[propX]=值[propY];
值[propY]=tmp;
}
altStats(值“一”、“二”);
console.log(values.One);//20
console.log(value.Two);//10

console.log(value.Three);//30
这需要一个最新的浏览器。@DanielA.White针对旧浏览器和新浏览器进行了更新。它非常有效。但是因为我需要交换很多时间,所以需要太多的线路。这就是为什么我需要一个单行执行的函数。感谢您的解决方案;)这需要一个最新的浏览器。@DanielA.White为旧的和最近的浏览器更新。它工作得很好。但是因为我需要交换很多时间,所以需要太多的线路。这就是为什么我需要一个单行执行的函数。感谢您的解决方案;)事实上,这给我留下了深刻的印象,但这有点过分了。没有冒犯;这是一个聪明的计划solution@SeanKwon我知道,但问题中写着“我可以做任何事情,但我不能在函数外进行更改”,所以我尝试了一种不太激进的更改解决方案。如果函数内无法访问1、2、3怎么办?@brucelefinalkungfu请阅读