第一次来这里的海报对我的心灵很温柔。如果您不了解我,也很抱歉,我不是英语为母语的人。
这是我的代码,我将尝试在下面解释我不了解的内容。
var numbers = [1, 2, 3, 4, 5];
var total = 0;
i = 0;
function averageValue(numbers) {
var averageValue = 0;
if (numbers.length > 0) {
for (i = 0; i < numbers.length; i++) {
total += numbers[i];
}
averageValue = total / numbers.length;
}
return averageValue;
}
var average = averageValue(numbers);
console.log(total);
console.log(i);
我知道代码在做什么,这不是问题,但是我不明白的是为什么console.log方法不使变量- total和i为0 -但是取而代之的是15和5。我最近刚刚研究了JavaScript范围,并且给人的印象是全局范围无法访问本地范围,因此为什么在这种情况下它可以做到这一点。我是一个新手编码人员,可能只是觉得很傻,但是我真的很感谢您的帮助。
答案 0 :(得分:0)
total
和i
被声明(分别与var
和作为隐式全局变量)外部。
然后函数访问它们。它不会使用var
重新声明它们(这会在较小的范围内创建具有相同名称的新变量)。该函数将更改现有变量的值。
如果在函数内部声明了变量,那么函数外部的代码将无法访问它们。您会得到一个例外:
var numbers = [1, 2, 3, 4, 5];
function averageValue(numbers) {
var total = 0;
var i = 0;
var averageValue = 0;
if (numbers.length > 0) {
for (i = 0; i < numbers.length; i++) {
total += numbers[i];
}
averageValue = total / numbers.length;
}
return averageValue;
}
var average = averageValue(numbers);
console.log(total);
console.log(i);
如果您在函数内部和外部声明了变量,那么函数中的代码将仅对局部变量起作用,而在更大范围内的变量则保持不变:
var numbers = [1, 2, 3, 4, 5];
var total = 0;
i = 0;
function averageValue(numbers) {
var total = 0;
var i = 0;
var averageValue = 0;
if (numbers.length > 0) {
for (i = 0; i < numbers.length; i++) {
total += numbers[i];
}
averageValue = total / numbers.length;
}
return averageValue;
}
var average = averageValue(numbers);
console.log(total);
console.log(i);