Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Javascript中forEach方法的范围_Javascript_Function_Methods_Foreach_Scope - Fatal编程技术网

关于Javascript中forEach方法的范围

关于Javascript中forEach方法的范围,javascript,function,methods,foreach,scope,Javascript,Function,Methods,Foreach,Scope,我是一个试图学习用javascript编写代码的初学者。很抱歉问这样一个基本的问题,但是我已经阅读了很多资源,我仍然很难理解关于forEach()方法(可能还有其他方法?)范围的以下行为 考虑一个数字数组。我想计算数组中的数字之和 所以我声明并初始化了一个名为sum的变量 然后我使用forEach()方法计算项目的总和,并将结果放入sum变量中 然后输入console.log(sum) 我不明白的是为什么console.log可以访问forEach()函数中的sum变量?我认为它会打印0,因为c

我是一个试图学习用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

如果使用
let sum=0
inside.forEach()重新声明(请参见下面的示例)相同的变量,则每次交互时都会重置该变量,并且在循环完成后,它将再次打印“0”,因为该变量的另一个实例已在循环中使用

让arrayOfNumber=[1,5,9,16,34,45]
设和=0;
ArrayOfNumber.forEach(函数(项){
设和=0;
总和=总和+项目;
控制台日志(总和)
})

console.log(sum)//打印110
您尚未在for each循环中定义sum。您已经在循环的作用域上实例化了sum it


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

没有关系,如果将数组sum声明为全局外部,则可以全局访问它,并且可以在中间时间在任何函数中添加值后进行访问。。。您只是给它添加了值,并没有更改变量的范围。如果您重新声明
sum=sum+item再次在函数内部,在函数完成后,您将无法在外部访问它。好的,我现在就知道了。在函数内部重新使用变量不会改变其作用域,因此它仍然可以从外部访问。谢谢