window.setInterval可能的范围问题?

时间:2012-10-27 13:26:16

标签: javascript jquery

感谢您抽出宝贵时间阅读这篇文章。最后积累了足够的勇气在这里问一个问题:)希望我以正确的方式提出我的问题。

我的问题是我试图在页面周围随机设置“方块”动画,但是我遇到了setInterval方法的问题。

您可以在http://jsfiddle.net/xEMXh/

找到它

在Init函数中,我试图通过每个ghost元素并设置一个间隔函数,然后每X秒以随机方向对其进行动画处理。

for (ghostCount = 0; ghostCount < ghosts.length; ghostCount += 1) {
            var speed = LesMccutcheon.GhostHunter.GetSpeed($(ghosts[ghostCount]).attr('data-speed')),
                activeGhost = ghosts[ghostCount];
            window.setInterval(function() {
                LesMccutcheon.GhostHunter.MoveInDirection(activeGhost);
            }, speed);
        }

正在发生的事情只是最后一个“幽灵”元素是动画。我知道这是因为在for循环中我覆盖了变量,当第一个间隔被调用时,activeGhost是for循环中的最后一个。

我尝试在set.Interval中直接使用 ghosts [ghostCount] ,但似乎设置的间隔无法访问此项。我尝试将它设置为set.Interval anom函数内的变量,但它记录为undefined。

我唯一另外一半的想法是尝试设置增量var标识符,但这似乎非常适得其反,并不是一个好方法。

提前感谢任何建议!

莱斯

1 个答案:

答案 0 :(得分:2)

代码中的

将为每个循环覆盖变量activeGhost。 只需将setInterval的调用放入这样的闭包中

( function (activeGhost) {
    window.setInterval(function() {
        LesMccutcheon.GhostHunter.MoveInDirection(activeGhost);
    }, speed);
} ( activeGhost) );

这样就应该保留对正确元素的引用。