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

Simple nested setTimeout() only runs once (JavaScript)

本文关键字:一次 JavaScript 运行 setTimeout 嵌套 简单      更新时间:2023-09-26

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

http://jsfiddle.net/CYEBC/2/

$(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
        });
        setTimeout('galleryScroll()', 100);
    }
});​

该 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);

结果:http://jsfiddle.net/CYEBC/12/

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