有关本地和全局范围的问题-JavaScipt

时间:2020-04-09 21:57:48

标签: javascript function variables scope executioncontext

第一次来这里的海报对我的心灵很温柔。如果您不了解我,也很抱歉,我不是英语为母语的人。

这是我的代码,我将尝试在下面解释我不了解的内容。


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范围,并且给人的印象是全局范围无法访问本地范围,因此为什么在这种情况下它可以做到这一点。我是一个新手编码人员,可能只是觉得很傻,但是我真的很感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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);