2015-10-07 53 views
1

我一直对quarterStr未定义?我试图在getNexthreeMonths函数中访问它。所以一个月从下拉菜单中选择,然后我要访问的getNexthreeMonths结果:JQuery事件以外的变量范围

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); 
} 
+0

尝试移动console.log(quarterStr)}};在你的代码中。它看起来像在你定义的匿名函数之外。 –

+0

虽然我想访问getNextThreeMonths:函数中的quarterStr,但不知道我是否理解 –

+0

javascript范围:http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript – Lee

回答

3

有两个原因。

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

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

你需要重新思考你的逻辑。您无法使用JavaScript来时间旅行,并找出用户在将来某个时候可能会做的事情。

+0

优秀的解释。 –