请你解释一下为什么我会得到不同的结果;
这是完成的代码和我希望的结果:
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);
你能告诉我为什么?,以及如何在这范围内工作? 如果可能的话请用图片(图形)..
答案 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
内。