我需要延迟我的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);
如果我删除代码中的注释,它会给我一个不同的输出。
答案 0 :(得分:0)
不幸的是,JavaScript中没有睡眠或等待功能。 超时不会暂停程序执行。相反,它会安排在稍后的某个时间点执行该功能,并继续,好像此时没有发生任何事情。
因此,如果没有超时,代码将作为普通的嵌套循环运行。
使用超时时,内部循环变为“计划一次,并且当触发计划下一次”时。因此外部循环将安排每本书的所有第一页。 一秒钟后,第一页被触发,这将安排第二页。 在另一秒之后,第二页被触发,依此类推。
答案 1 :(得分: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函数中定时的值。