【问题标题】:Variable scope outside of JQuery EventJQuery 事件之外的变量范围
【发布时间】:2016-01-05 00:26:41
【问题描述】:

quarterStr 一直未定义?我正在尝试在 getNexthreeMonths 函数中访问它。所以从下拉菜单中选择一个月,然后我想在getNexthreeMonths 中访问结果:

getNextThreeMonths: function() {
  $("#date").on('change', function (e){
    var currentMonth = $(this).find('option:selected').attr('id');
    var currentMonth = parseInt(currentMonth);
    var qNum = Math.floor(currentMonth / 3);
    var qArr = ["Jan","Apr","Jul","Oct"];
    var quarterStr = qArr[ (qNum+1) % 4 ] + "," + qArr[ (qNum+2) % 4 ] + "," + qArr[ (qNum+3)%4 ];

  });
  console.log(quarterStr);
}

【问题讨论】:

  • 尝试将 console.log(quarterStr) 移到 });在你的代码中。看起来它在您定义的匿名函数之外。
  • 我想访问 getNextThreeMonths: 函数中的 QuarterStr。我不确定
  • 问题是quarterStr 的范围是回调函数,而不是getNextThreeMonths。要在回调之外访问变量,您需要在回调之外声明它。
  • @Lee 您需要将其发布为答案并声明您的声望点……在我这样做之前! ;)

标签: javascript scope closures


【解决方案1】:

这有两个原因。

首先,var quarterStr = 中的var 表示该变量在本地作用于您作为参数传递给on() 的匿名函数,并且无法在该函数之外访问。

其次,在日期元素上的 change 事件触发并且该函数运行之前,不会将值分配给 quarterStr。您正在尝试在分配事件处理程序后立即读取该值。到那时它不可能改变,所以它永远是未定义的。

你需要重新思考你的逻辑。您不能使用 JavaScript 来进行时间旅行并弄清楚用户在未来某个时间点可能会做什么。

【讨论】:

  • 很好的解释。
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 2011-11-23
  • 2011-07-03
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多