JavaScript范围:请解释为什么不同的结果和循环创建变量

时间:2017-04-15 21:39:45

标签: javascript arrays for-loop scope

请你解释一下为什么我会得到不同的结果;

这是完成的代码和我希望的结果:

startRange

这给了我希望的结果:function largest_of_arrs(arr){ var largest_arr = []; var holder; var max = 1; for(var i = 0; i < arr.length; i++){ var sum = 0; for(var j = 0; j < arr[i].length; j++){ sum += arr[i][j]; if(sum > max) { max = sum; largest_arr = arr[i]; } } } return largest_arr; } var array_1 = [[1,2,3,4,5],[1,2,2,3,1],[11,12,23,45,88],[20,20,5,5,1]]; largest_of_arrs(array_1);

但是当我在for循环之外声明sum变量时,就像这样

[11,12,23,45,88]

结果是:function largest_of_arrs(arr){ var largest_arr = []; var holder; var max = 1; var sum = 0; for(var i = 0; i < arr.length; i++){ for(var j = 0; j < arr[i].length; j++){ sum += arr[i][j]; if(sum > max) { max = sum; largest_arr = arr[i]; } } } return largest_arr; } var array_1 = [[1,2,3,4,5],[1,2,2,3,1],[11,12,23,45,88],[20,20,5,5,1]]; largest_of_arrs(array_1);

你能告诉我为什么?,以及如何在这范围内工作? 如果可能的话请用图片(图形)..

3 个答案:

答案 0 :(得分:0)

  

你能告诉我为什么吗?

在第一种情况下,在外循环的每次迭代中将 sum 的值重置为零。在第二种情况下,你不要这样总和只是不断积累。

  

这里的范围如何?

使用 var 声明的变量具有函数作用域(如果全局声明则为全局变量)。您的问题与范围无关,因为您将0分配给

  

如果可能请用图片(图形)

抱歉,没有照片。 : - (

答案 1 :(得分:0)

First Case - 
i=0
  sum = 0;
  j iterates till end of loop 
  sum = 1+2+3+4+5;
i=1
  sum = 0;
  j iterates till end of loop 
  sum = 1+2+2+3+1;
i=2
  sum = 0;
  j iterates till end of loop 
  sum = 11+12+23+45+88;
....

Second Case - 
i=0
  sum = 0;
  j iterates till end of loop 
  sum = 1+2+3+4+5;
i=1
  sum = 1+2+3+4+5;
  j iterates till end of loop 
  sum = (1+2+3+4+5)+1+2+2+3+1;
i=2
  sum = ((1+2+3+4+5)+1+2+2+3+1);
  j iterates till end of loop 
  sum = ((1+2+3+4+5)+1+2+2+3+1)+11+12+23+45+88;
...

答案 2 :(得分:0)

for语句没有在javascript中定义范围,只有函数这样做(根据ES5)。 您的问题是因为您将0分配给sum:在外部for内。