我在可变范围方面有问题。下面的代码给了我未定义的变量错误。我可以直接在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()
中传递函数的方式要求它在全局范围内,并且还以其初始值“冻结” cursorX
和cursorY
,因为构造的字符串仅在setInterval()
时构建一次首先被调用。但是,cursorX
和cursorY
当时甚至还没有值,因此不能满足您的要求,因为它不起作用。
因此,现在我猜测您希望setInterval()
使用实时的最新值cursorX
和cursorY
。您可以使用如下函数引用来实现:
setInterval(function() {
mymodule.saveCursor(cursorX, cursorY);
}, 300);
这将使用最新保存的
cursorX
和cursorY
版本,尽管您似乎不必在第一个mousemove事件发生之前将其初始化为任何内容。