javascript 函数内的 setInterval 内的未定义变量

javascript undefined variable inside setInterval that is inside function

我遇到了变量范围的问题。下面的代码给我未定义的变量错误。我可以直接在 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);
    },                 
}

您在 setInterval() 中传递函数的方式要求它在全局范围内,并且 "freezes" cursorXcursorY 的初始值也是因为您构造的字符串仅在首次调用 setInterval() 时构建一次。但是,cursorXcursorY 甚至在那个时候还没有值,所以这不可能是你想要的,因为它不会起作用。

所以,现在我猜测您希望 setInterval() 使用 cursorXcursorY 的实时最新值。您可以使用这样的函数引用来做到这一点:

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

这将使用最近保存的 cursorXcursorY 版本,尽管看起来您不一定要在第一个 mousemove 事件发生之前将它们初始化为任何内容。

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

实际上是

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

它不会随时间更新,它永远是未定义的。

你需要使用闭包

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