关于本地和全球范围的问题-JavaScipt
Question about the local and global scope -JavaScipt
第一次发帖请善待我的灵魂。如果你不明白我的意思,我也很抱歉,我的母语不是英语。
这是我的代码,我会尝试在下面解释我不明白的地方。
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 as 0 - 而不是 15 和 5。我最近刚刚研究了 JavaScript 范围,我的印象是全局范围无法访问本地范围,那么为什么它可以做到这一点这个情况。我是一个新手编码员,可能只是想傻,但我真的很感激任何帮助。
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);
第一次发帖请善待我的灵魂。如果你不明白我的意思,我也很抱歉,我的母语不是英语。
这是我的代码,我会尝试在下面解释我不明白的地方。
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 as 0 - 而不是 15 和 5。我最近刚刚研究了 JavaScript 范围,我的印象是全局范围无法访问本地范围,那么为什么它可以做到这一点这个情况。我是一个新手编码员,可能只是想傻,但我真的很感激任何帮助。
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);