我在可变范围方面有问题。下面的代码给了我未定义的变量错误。我可以直接在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()中传递函数的方式要求它在全局范围内,并且还以其初始值“冻结” cursorXcursorY,因为构造的字符串仅在setInterval()时构建一次首先被调用。但是,cursorXcursorY当时甚至还没有值,因此不能满足您的要求,因为它不起作用。

因此,现在我猜测您希望setInterval()使用实时的最新值cursorXcursorY。您可以使用如下函数引用来实现:

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


这将使用最新保存的cursorXcursorY版本,尽管您似乎不必在第一个mousemove事件发生之前将其初始化为任何内容。

09-17 11:46