在函数内部的setInterval里面的javascript undefined变量

时间:2015-02-06 19:47:47

标签: javascript javascript-objects

我遇到了变量范围的问题。下面的代码给出了未定义的变量错误。我可以直接在mymodule对象中定义cursorX。但我想这不是正确的方法,因为我最终会得到数十个变量。有没有办法在mouseTracking中声明变量?

var mymodule = {
    variable1 : false,
    variable2 : false,
    //some more variables

    somefunctionname: function(){

    },

    //some more functions

    mouseTracking: function(){                       
          var cursorX;
          var cursorY;
          document.onmousemove = function(e,cursorX,cursorY){
              cursorX = e.pageX;
              cursorY = e.pageY;                                
          }
          setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300);
    },                 
}

2 个答案:

答案 0 :(得分:2)

您在setInterval()中传递函数的方式要求它在全局范围内,并且还会将cursorXcursorY“冻结”为初始值,因为您构造的字符串仅在首次调用setInterval()时生成一次。但是,cursorXcursorY在这一点上甚至还没有值,因此无法满足您的要求,因为它不起作用。

所以,现在我猜你希望setInterval()使用cursorXcursorY的实时,最新值。您可以使用如下函数引用来执行此操作:

setInterval(function() {
    mymodule.saveCursor(cursorX, cursorY);
}, 300);

这将使用最近保存的cursorXcursorY版本,但看起来您不一定要将这些版本初始化为任何内容,直到第一次发生mousemove事件。

答案 1 :(得分:0)

setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300);

实际上是

setInterval("mymodule.saveCursor(undefined,undefined)", 300);

它不会随着时间的推移而更新,它将始终未定义。

您需要使用闭包

setInterval( function() { mymodule.saveCursor(cursorX,cursorY); }, 300);