javascript – 循环setTimeout

前端之家收集整理的这篇文章主要介绍了javascript – 循环setTimeout前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我目前正试图围绕一些JavaScript.

我想要的是要在屏幕上打印的文本,然后计数到给定的数字,如下所示:

“Test”

[1 sec. pause]

“1”

[1 sec. pause]

“2”

[1 sec. pause]

“3”

这是我的JS:

$(document).ready(function() {

    var initMessage = "Test";
    var numberCount = 4;    

function count(){

    writeNumber = $("#target");

    setTimeout(function(){
        writeNumber.html(initMessage);
    },1000);

        for (var i=1; i < numberCount; i++) {

    setTimeout(function(){
        writeNumber.html(i.toString());
    },1000+1000*i)};

};

 count();

});

这是我的标记

当我渲染页面时,我得到的只是“测试”,然后是“4”.

我不是JavaScript天才,所以解决方案可能相当容易.任何有关错误提示都受到高度赞赏.

你可以在这里玩我的例子:http://jsfiddle.net/JSe3H/1/

最佳答案
您有一个可变范围问题.循环内的计数器(i)仅限于计数功能.当循环执行完毕时,值为4.这会影响每个setTimeout函数,这就是为什么你只看到“4”.

我会像这样重写它:

function createTimer(number,writeNumber) {
    setTimeout(function() {
        writeNumber.html(number.toString());
    },1000 + 1000 * number)
}

function count(initMessage,numberCount) {
    var writeNumber = $("#target");

    setTimeout(function() {
        writeNumber.html(initMessage);
    },1000);

    for (var i = 1; i < numberCount; i++) {
        createTimer(i,writeNumber);
    }
}

$(document).ready(function() {

    var initMessage = "Test";
    var numberCount = 4;


    count(initMessage,numberCount);

});

createTimer函数确保使用createTimer提供的新范围“捕获”循环内的变量.

更新示例:http://jsfiddle.net/3wZEG/

另请查看以下相关问题:

> What’s going on under the hood here? Javascript timer within a loop
> JavaScript closure inside loops – simple practical example

猜你在找的jQuery相关文章