关于 Javascript 中 forEach 方法的范围

about the scope of forEach method in Javascript

我是初学者,正在尝试学习 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

您没有在for each 循环中定义sum。您已经在循环范围之上实例化了它。

由于循环在循环中定义的 sum 的范围内能够改变 sum,所以这个现在改变的 sum 就是你最后记录的内容。如果您在循环内定义了 sum,则它不会在循环范围之外定义,并且在尝试打印它时会出现错误。