var Arr_avg = function() {
var total = 0;
var arr = [];
while (true) {
var inp = Number(prompt("enter value"));
if (inp !== 0) {
arr.push(inp);
var total = arr.reduce(
(accumulator, currentValue) => accumulator + currentValue
);
} else {
alert("values are" + arr);
alert("total is" + total);
alert("average is" + (total / arr.length));
break;
}
}
}
这是我的js程序,用于计算数组中数字的总和,平均值并显示数组。代码工作正常,但我对此表示怀疑,如下所示:
当我在while循环之外声明空数组var arr=[];
时,程序运行正常,但是当我在if
块中声明它时,程序仅打印最后附加的数字运行时将其移至数组。
我是js新手,这是一些全局/局部变量吗?
请解释
谢谢
答案 0 :(得分:1)
如果将var arr = []
放在if
块中,则每次在循环中清空数组之前,都将输入推入其中。因此,数组仅包含最后一个输入。 var arr = []
可以视为
var arr;
arr = [];
第一行仅声明变量,第二行为其分配值。如果变量已经有一个值,则将旧值替换为该值。因此,您将丢失数组的旧内容。
您可能已经了解到var
声明已“悬挂”在函数顶部。这仅涉及声明部分,该赋值仍在编写声明的位置执行。因此,如果它在循环内,则每次都会对该变量进行重新初始化。