首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将for循环转换为forEach循环时重新分配变量值时遇到的问题

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

Stack Overflow用户
提问于 2018-06-22 04:53:59
回答 2查看 36关注 0票数 2

我正在尝试将循环从for循环转换为遍历数组的forEach循环。循环的目的是找到数组中最大的数字,并返回最大的数字。

当我尝试将其作为for循环执行时,它可以工作,但我似乎不能将其作为forEach循环来执行。如果有可能,那怎么做呢?否则,为什么不能这样做呢?

下面是for循环,--按我希望的那样工作--

代码语言:javascript
复制
 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);
 };

这是forEach

代码语言:javascript
复制
 function getBig(x){
    var largeNumber = 0;
    var argue = x;
    argue.forEach(function(theNumber){
        if(theNumber > largeNumber){
            var largeNumber = theNumber;
        }
    })
    console.log(largeNumber);
  };

我似乎遇到的问题是更改forEach中变量的值。我怎么才能改变呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-22 04:57:27

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

forEach中,您将在一个仅限于函数范围的函数中使用var创建largeNumber

对于forEach,删除var声明会很好:

largeNumber = theNumber

票数 0
EN

Stack Overflow用户

发布于 2018-06-22 04:58:28

var是挂起的,具有函数作用域,而不是块作用域。在解释器中,原始代码如下所示:

代码语言:javascript
复制
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被悬挂到最近的函数的顶部,这与getBig函数不一样。为了清晰起见,我们将其命名为largeNumber2 --在解释器看来,它如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
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]);

还请注意,函数在其最后的括号之后不应该有分号。您的功能可以简化为:

代码语言:javascript
复制
const getBig = arr => console.log(Math.max(...arr));
getBig([2, 3, 4, 1, 2]);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50980874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档