简单嵌套setTimeout()只运行一次(JavaScript)

简单嵌套setTimeout()只运行一次(JavaScript),javascript,nested,settimeout,Javascript,Nested,Settimeout,出于某种原因,my galleryScroll()函数只运行一次,即使该函数使用setTimeout()调用自己。我认为这个问题可能与范围有关,但我不确定: HTML: <html> <head> </head> <body> <div id="box"> </div> </body> </html>​ ​ 函数galleryScroll()未定义在要在setTimeout()中

出于某种原因,my galleryScroll()函数只运行一次,即使该函数使用setTimeout()调用自己。我认为这个问题可能与范围有关,但我不确定:

HTML:

<html>
<head>
</head>
<body>
    <div id="box">
    </div>
</body>
</html>​

函数
galleryScroll()
未定义在要在
setTimeout()
中计算的正确范围内。如果希望它在循环中运行,请在函数后的
setInterval()
中调用它

$(document).ready(function() {
    var x = $('#box').offset().left;
    var y = $('#box').offset().top;
    galleryScroll();

    function galleryScroll() {
        x = x + 1;
        y = y + 1;
        $('#box').offset({
            left: x,
            top: y
        });
    }
    // Call in setInterval() outside the function definition.
    // Note also, I've changed the eval string 'gallerySroll()' to the function reference galleryScroll
    setInterval(galleryScroll, 100);
});​

您的问题是如何在setTimeout中调用galleryScroll()函数。将该行更改为:

   setTimeout(galleryScroll, 100);
结果是:


注意:我不确定这是否是所需的行为,但当正确调用代码时会发生什么。

在代码中我认为JSFIDLE链接已经足够了,但我添加了代码。请删除你的否决票…这不是因为
galleryScroll
在被
setTimeout
调用时没有定义它,而是因为它没有在全局范围内求值的字符串的适当范围内定义。哇哦。我以为第一个参数必须使用字符串。所以现在我不确定该接受哪个答案——这两个答案似乎都起到了作用!两个答案都是正确的——我接受这个答案,因为它是两个答案中比较简单的一个(勉强)。谢谢
   setTimeout(galleryScroll, 100);