【问题标题】:Having to declare javascript variables inside of functions after declaring them in scoping functions在作用域函数中声明它们之后必须在函数内部声明 javascript 变量
【发布时间】:2018-02-06 08:21:21
【问题描述】:

我发现,为了让我的代码正常工作,我必须声明所有(或至少 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);
  }
});

更新--- 我相信我终于找到了问题……toggleTemp() 中的 if 语句太多了……现在看起来不错

【问题讨论】:

  • 您显示的代码不需要本地设置的变量works here。您可能还有其他一些导致问题的代码。显示更多您的实际代码,并可能提供Minimal, Complete, and Verifiable example
  • 如果没有局部变量,哪个部分不起作用?显示的代码中没有任何内容调用您的 setAttribute() 函数,但该函数是唯一尝试使用外部函数中的变量的地方。您能否请edit 您的问题展示一个您认为应该有效但无效的自包含示例,并在代码中包含几个 cmets 以指出哪一行出错了?跨度>
  • @Patrick &@nnnnnn...抱歉,我是新手,不确定是否允许放置“太多”代码..我会修改我的问题,希望显示我认为哪里出了问题...此外,我已经输入了您的一些建议,因此我得到了一些所需的功能,但不是全部

标签: javascript function scope global-variables


【解决方案1】:

在您展示的示例中,实际上您绝对不需要局部变量(wData 参数除外):

$(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);
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2018-04-19
    • 2012-10-17
    • 2022-11-30
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多