关于本地和全球范围的问题-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 范围,我的印象是全局范围无法访问本地范围,那么为什么它可以做到这一点这个情况。我是一个新手编码员,可能只是想傻,但我真的很感激任何帮助。

totali 被声明(分别使用 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);