在作用域函数

时间:2017-08-29 01:54:58

标签: javascript function scope global-variables

我发现为了让我的代码工作,我必须声明所有(或至少80%)我的变量并在本地实例化它们,即使我已经在范围函数中已经这样做了...为什么是这个?例如:

$(function() {
  var cUnit, fUnit, temp, wind, humidity, weatherDescrpt, wData;
  cUnit = true;
  fUnit = false;

  $("#fUnit").click(function() {
    var cUnit = true;
    var fUnit = false;
    toggleTemp(cUnit,fUnit);
  });

  function setAttribute(wData) {
    cUnit = true;
    fUnit = false;
    temp = displayTemp(wData.main.temp,fUnit);
  }
});

UPDATE --- 我相信我终于找到了这个问题......如果toggleTemp()中的语句太多了......现在看起来不错了

1 个答案:

答案 0 :(得分:0)

在你展示的例子中,你确实需要绝对没有局部变量($(function() { $("#fUnit").click(function() { toggleTemp(true, false); }); function setAttribute(wData) { // looks like dead code that is called from nowhere displayTemp(wData.main.temp, false); } }); 参数除外):

$(function() {
  const cUnit = true;
  const fUnit = false;
  $("#fUnit").click(function() {
    toggleTemp(cUnit, fUnit);
  });

  function setAttribute(wData) {
    displayTemp(wData.main.temp, fUnit);
  }
});

当然,您可以(并且可能应该)将局部变量中的常量分解出来。但是,你只能 声明并在模块范围内分配它们,而不是其他地方:

unlist