我的 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);
如果我删除代码中的注释,它将给出不同的输出。
最佳答案
不幸的是,JavaScript 中没有 sleep 或等待函数。 超时不会暂停程序执行。相反,它会安排该函数在稍后的某个时间点执行,并继续执行,就好像此时什么也没有发生一样。
因此,如果没有超时,代码将作为正常的嵌套循环运行。
超时后,内部循环变为“调度一次,触发时调度下一个”。所以外循环会调度每本书的所有第一页。 一秒钟后,第一页被触发,这将安排第二页。 再过一秒,第二个页面就会被触发,依此类推。
关于javascript - 循环内 sleep /延迟/超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14598210/