1

我的 JavaScript 代码需要延迟,但如果我在代码中创建超时函数,就会遇到问题。但是,如果我取出超时代码,它工作得很好。我在这里搜索了关于超时/延迟的另一篇文章,但我认为我的情况有点不同。

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

(function myLoop(x) {

    page = 3;

    (function myLoop2(page) {
        //setTimeout(function () {   

        var name = myArray[x];

        alert(name + ' Page: ' + page);

        if (--page) myLoop2(page);
        //}, 1000 )
    })(page);

    if (x != 0) myLoop(--x);
})(x);

如果我删除代码中的注释,它会给我一个不同的输出。

4

2 回答 2

0

是的,Javascript 中没有睡眠/等待功能。但是您可以使用 SetTimeout 函数完成大部分所需的功能。

我认为下面的代码会给你想要的结果。核实

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

   (function myLoop(x2) {

    page = 3;

    (function myLoop2(page1, x1) {


       setTimeout(function () {  var name = myArray[x1];

    alert(name + ' Page: ' + page1);

    if (--page1)  myLoop2(page1, x1);}, 1000 )

    })(page,x2); 

    if (x2 != 0)  setTimeout(function () {myLoop(--x2);}, 4000 )
})(x);

我们必须根据情况使用 setTimeout 函数。setTimeout 不会阻塞代码流。

在 Timed 函数中使用全局变量将导致在执行时间实例中使用变量。不是函数在 setTimeout 函数中计时时的值。

于 2013-01-30T09:47:25.587 回答
0

不幸的是,JavaScript 中没有睡眠或等待功能。超时不会暂停程序执行。相反,它会安排函数在稍后执行,并继续执行,就好像此时没有发生任何事情一样。

因此,如果没有超时,代码将作为正常的嵌套循环运行。

使用超时,内部循环变为“调度一次,并在触发时调度下一个”。所以外循环将安排每本书的所有第一页。一秒钟后,第一页被触发,这将安排第二页。再过一秒,第二页被触发,依此类推。

于 2013-01-30T07:00:43.943 回答