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" cursorX
和 cursorY
的初始值也是因为您构造的字符串仅在首次调用 setInterval()
时构建一次。但是,cursorX
和 cursorY
甚至在那个时候还没有值,所以这不可能是你想要的,因为它不会起作用。
所以,现在我猜测您希望 setInterval()
使用 cursorX
和 cursorY
的实时最新值。您可以使用这样的函数引用来做到这一点:
setInterval(function() {
mymodule.saveCursor(cursorX, cursorY);
}, 300);
这将使用最近保存的 cursorX
和 cursorY
版本,尽管看起来您不一定要在第一个 mousemove 事件发生之前将它们初始化为任何内容。
setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300);
实际上是
setInterval("mymodule.saveCursor(undefined,undefined)", 300);
它不会随时间更新,它永远是未定义的。
你需要使用闭包
setInterval( function() { mymodule.saveCursor(cursorX,cursorY); }, 300);
我遇到了变量范围的问题。下面的代码给我未定义的变量错误。我可以直接在 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" cursorX
和 cursorY
的初始值也是因为您构造的字符串仅在首次调用 setInterval()
时构建一次。但是,cursorX
和 cursorY
甚至在那个时候还没有值,所以这不可能是你想要的,因为它不会起作用。
所以,现在我猜测您希望 setInterval()
使用 cursorX
和 cursorY
的实时最新值。您可以使用这样的函数引用来做到这一点:
setInterval(function() {
mymodule.saveCursor(cursorX, cursorY);
}, 300);
这将使用最近保存的 cursorX
和 cursorY
版本,尽管看起来您不一定要在第一个 mousemove 事件发生之前将它们初始化为任何内容。
setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300);
实际上是
setInterval("mymodule.saveCursor(undefined,undefined)", 300);
它不会随时间更新,它永远是未定义的。
你需要使用闭包
setInterval( function() { mymodule.saveCursor(cursorX,cursorY); }, 300);