我遇到了变量范围的问题。下面的代码给出了未定义的变量错误。我可以直接在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);
},
}
答案 0 :(得分:2)
您在setInterval()
中传递函数的方式要求它在全局范围内,并且还会将cursorX
和cursorY
“冻结”为初始值,因为您构造的字符串仅在首次调用setInterval()
时生成一次。但是,cursorX
和cursorY
在这一点上甚至还没有值,因此无法满足您的要求,因为它不起作用。
所以,现在我猜你希望setInterval()
使用cursorX
和cursorY
的实时,最新值。您可以使用如下函数引用来执行此操作:
setInterval(function() {
mymodule.saveCursor(cursorX, cursorY);
}, 300);
这将使用最近保存的cursorX
和cursorY
版本,但看起来您不一定要将这些版本初始化为任何内容,直到第一次发生mousemove事件。
答案 1 :(得分:0)
setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300);
实际上是
setInterval("mymodule.saveCursor(undefined,undefined)", 300);
它不会随着时间的推移而更新,它将始终未定义。
您需要使用闭包
setInterval( function() { mymodule.saveCursor(cursorX,cursorY); }, 300);