将for循环转换为forEach循环时重新分配变量值的问题

时间:2018-06-22 04:53:59

标签: javascript arrays loops foreach

我正在尝试将循环从for循环转换为对数组进行迭代的forEach循环。循环的目的是在数组中找到最大的数字并返回最大的数字。

当我尝试将其作为for循环使用时它可以工作,但我似乎无法将其作为forEach循环来使用。有可能吗?否则为什么不能完成?

这是for循环,这按我想要的方式工作

 function getBig(x){
 var largeNumber = 0;
 var argue = x;
 for(i = 0; i < argue.length; i++){
    if(argue[i] > largeNumber){
            var largeNumber = argue[i];

        }
 }
 console.log(largeNumber);
 };

这是每个人

 function getBig(x){
    var largeNumber = 0;
    var argue = x;
    argue.forEach(function(theNumber){
        if(theNumber > largeNumber){
            var largeNumber = theNumber;
        }
    })
    console.log(largeNumber);
  };

我似乎遇到的麻烦是更改了forEach中变量的值。我该如何更改?

2 个答案:

答案 0 :(得分:1)

var被吊起并具有功能范围,而不是块范围。对于解释器,您的原始代码如下所示:

function getBig(x){
  var largeNumber;
  largeNumber = 0;
  var argue = x;
  for(i = 0; i < argue.length; i++){
    if(argue[i] > largeNumber){
      largeNumber = argue[i];

    }
  }
  console.log(largeNumber);
};

在您的forEach中,largeNumber被提升到 nearest函数的顶部,该函数与getBig函数不同。为了清楚起见,我们将其称为largeNumber2-对于解释器,它看起来像这样:

function getBig(x){
  var largeNumber = 0;
  var argue = x;
  argue.forEach(function(theNumber){
    var largeNumber2;
    if(theNumber > largeNumber2){
      largeNumber2 = theNumber;
    }
  })
  console.log(largeNumber);
};

这是一个单独的变量,绑定到forEach的内部,在外部不可见。尝试通过在内部函数中不使用largeNumber来将其分配给外部范围中的var

function getBig(x){
  var largeNumber = 0;
  var argue = x;
  argue.forEach(function(theNumber){
    if(theNumber > largeNumber){
      largeNumber = theNumber;
    }
  })
  console.log(largeNumber);
}
getBig([2, 3, 4, 1, 2]);

还请注意,函数的最后括号后不应包含分号。您的功能可以简化为:

const getBig = arr => console.log(Math.max(...arr));
getBig([2, 3, 4, 1, 2]);

答案 1 :(得分:0)

中,您要通过仅在全局上下文中使用 var 声明 largeNumber 作为全局变量。因此,当您在循环后再次访问 largeNumber 时,它将为您提供正确的值。

forEach 中,您正在使用 var 在功能范围内的功能中创建 largeNumber

对于 forEach ,删除 var 声明,它将正常工作:

  

largeNumber =人数