如何永久改变var?

时间:2016-03-10 16:48:24

标签: javascript

所以,我在一个函数和一个数组(称为“card_idx”)中设置了一个var,我希望将var设置为0,直到数组中达到某个数字,但数字不会增加按顺序(1..2..3..4额外)。它根据人的演奏方式跳转(所以它可以像... 1 ... 2 ...... 2.1 .... 5 .. ..3.2 ...)。我希望将var设置为0,直到达到特定的数字,然后将其更改为1.

我尝试将其设置为:

 var x=0;
if(card_idx == 3.2){
x=1
}

但是当3.2不再有时它会变回零,我怎么做才能保持1?

2 个答案:

答案 0 :(得分:0)

你可以试试这个。使用额外的布尔值来检查是否已设置x

请注意,您的变量不在迭代范围内。

var x = 0;
var hasSet = false;   

// start looping 
if (card_idx == 3.2 && hasSet = false) {
  x = 1
  hasSet = true;
}

或者也许(如果你的问题更清楚),这也可以解决。

var x = 0;

// start looping 
if (card_idx == 3.2 && x <= 0) {
  x = 1  
}

答案 1 :(得分:0)

虽然您的示例不足以重现问题,但我想您可能会遇到可变范围的问题。

JS变量本地作用于它们周围的函数,这对您有利。如果在遍历数据的函数的开头声明x,则循环可以修改它,并且在循环完成后将保留该值:

function crunch(data) {
  var x = 0;
  data.forEach(function (item) {
    if (item.index === 3.2) {
      x = 1;
    }
  });
  console.log(x);
}

如果item中的任何data index 3.2 x1将设置为forEach并打印到控制台结束。回调x使用闭包来抓取for,但这与x循环的效果相同。

在循环中使用crunch,在crunch返回之前不会重置该值。每次调用x时,0都会设置为1,如果某个项目具有正确的索引,则可能会设置为crunch,并且会保留该值直到结束forEach

现在,使用x,如果您要在中声明crunch 循环回调而不是function crunch(data) { data.forEach(function (item) { var x = 0; if (item.index === 3.2) { x = 1; } }); } ,则每次都会重置:

var

由于0在功能级别运行,因此保持其值,并且每个项目都为List list = ["a", "b", "c", "a", "d", "c", "a"]