JQuery Event之外的变量范围

时间:2015-10-07 16:41:52

标签: javascript scope closures

我一直未定义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);
}

1 个答案:

答案 0 :(得分:3)

这有两个原因。

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

其次,在日期元素触发更改事件并且运行该函数之前,该值不会分配给quarterStr。您在分配事件处理程序后尝试读取该值。到那时它无法改变,所以它总是未定义的。

你需要重新思考你的逻辑。您无法使用JavaScript来计算时间并确定用户将来可能会做些什么。