微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于JavaScript中的forEach方法的范围

如何解决关于JavaScript中的forEach方法的范围

我是一个初学者,试图学习使用javascript进行编码。很抱歉提出这样的基本问题,但是我已经阅读了很多资源,但是我仍然很难理解有关forEach()方法(可能还有其他方法?)范围的以下行为。

考虑数字数组。我想计算数组中数字的总和。

所以我声明并初始化了一个名为sum的变量。

然后我使用forEach()方法计算项目的总和,并将结果放入sum变量中

然后我console.log(sum)。

我不明白的是为什么console.log可以访问forEach()函数中的sum变量?我认为它将打印0,因为console.log在forEach()方法的本地范围之外。我了解变量sum具有全局范围,但是forEach()内部的计算是否具有局部范围?

感谢您的帮助。

let arrayOfNumbers = [1,5,9,16,34,45]

let sum = 0;

arrayOfNumbers.forEach(function(item) {

    sum = sum + item;
})

console.log(sum) //prints 110

解决方法

由于您在.forEach()循环外声明了变量sum,因此每次交互都会使循环外的sum变量递增。因此,当您console.log()时,它将显示110。

如果在.forEach()中使用let sum = 0重新声明(请参见下面的示例)相同的变量,则它将在每次交互时重置,并且在循环结束后,它将再次输出“ 0”,因为该变量的另一个实例在循环内使用。

let arrayOfNumbers = [1,5,9,16,34,45]

let sum = 0;

arrayOfNumbers.forEach(function(item) {

   let sum = 0;
   sum = sum + item;
   console.log(sum)
})

console.log(sum) //prints 110

,

您尚未在每个循环中定义sum。您已经实例化了求和结果,使其超出了循环范围。

由于循环属于在循环中定义的sum的范围之内,因此可以使sum发生变异,因此现在所记录的变异的sum是您要记录的内容。如果您在循环中定义了sum,则不会在循环范围之外定义它,并且在尝试打印时会出现错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。