$("#canvas").mousedown(function(e) {
for(i=0; i<allPoints[0].length; i++) {
var pointX = controlPoint[i].x;
var pointY = controlPoint[i].y;
var mouseX = e.pageX - this.offsetLeft;
var mouseY = e.pageY - this.offsetTop;
if(pointX + 5 > mouseX && pointX - 5 < mouseX && pointY + 5 > mouseY && pointY - 5 < mouseY) {
var testest = i;
$(this).bind('mousemove', function(e) {
//'i' is undefined here
//'testest' is defined
controlPoint[testest].x = e.pageX - this.offsetLeft;
controlPoint[testest].y = e.pageY - this.offsetTop;
});
}
}
}).mouseup(function(e){
$(this).unbind('mousemove');
});
嗨,出于某种原因,当我尝试在我的'mousemove'函数中使用for循环中的变量'i'时,它是未定义的。如果我因为某种原因将其分配给另一个变量,但是我不想这样做因为它似乎没必要。任何帮助将不胜感激。
答案 0 :(得分:1)
我无法确定,但我相信,因为您的i
变量是全球。始终使用global
关键字声明不应为var
的变量。例如,
for(var i=0; i<allPoints[0].length; i++) {
我认为你的应用程序在其他地方修改变量i
,这就是为什么将它分配给另一个变量似乎可以解决你的问题。这里真正的解决方案是使用带有var
关键字的本地变量。
答案 1 :(得分:0)
我未定义的事实非常奇怪。这种情况发生的唯一方法是,如果在代码中的其他位置将其设置为undefined。如果全局变量i从未在其他地方使用过,那么i的值将始终等于你的'mousemove'回调中的allPoints [0] .length,因为你在i变量周围创建了一个闭包,它将被设置为allPoints [0] .length在mousedown回调结束时。另外,请注意,testest将被提升到mousedown回调的顶部,因此mousemove回调中的testest值将始终是mousemove回调中设置的最后一个值。