在函数

时间:2017-03-07 14:19:07

标签: javascript jquery

我想在函数内交换两个全局变量值。

这是我到目前为止所尝试的内容。由于技术原因,我无法更改功能之外的值。我的脚本包含很多代码行,但我无法更改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

6 个答案:

答案 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)

ECMAScript 6解决方案

聪明的伎俩是使用[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