【问题标题】:about the scope of forEach method in Javascript关于 Javascript 中 forEach 方法的范围
【发布时间】:2020-09-30 18:48:15
【问题描述】:

我是一名尝试学习 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

【问题讨论】:

  • 没关系,如果您将数组 sum 声明为全局外部,则可以全局访问它,并且您可以在中途在任何函数内添加值后这样做...您只是为其添加了值,你没有改变变量的范围。如果你在函数内部再次声明let sum = sum + item;,你将无法在函数外部访问它。
  • 好的,我现在明白了。在函数内部重用变量不会改变它的作用域,所以它仍然可以从外部访问。非常感谢

标签: javascript function methods foreach scope


【解决方案1】:

由于您在 .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

【讨论】:

    【解决方案2】:

    您尚未在 for each 循环中定义 sum。您已在循环范围之上实例化 sum。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      相关资源
      最近更新 更多