Javascript recursion settimeout
Javascript recursion settimeout
我刚刚开始看javascript所以希望这将是一些简单的东西。我想做一个自动播放的图像幻灯片。这是非常简单的,有一些教程,但由于某种原因,我还没有能够得到它的工作。这是我的文件:
var image1 = new Image();
var image2 = new Image();
var image3 = new Image();
image1.src = "images/website6.jpg";
image2.src = "images/website7.jpg";
image3.src = "images/sunset.jpg";
var images = new Array(
"images/website6.jpg",
"images/website7.jpg",
"images/sunset.jpg"
);
setTimeout("delay(images,0)",2000);
function delay(arr,num){
document.slide.src = arr[num % 3];
var number = num + 1;
setTimeout("delay(arr,number)",1000);
}
我要更改的图像有id slide。我也有一些证据证明它是有效的。发生的是第一个图像加载。然后加载第二个图像(这意味着原始的setTimeout调用必须工作)。然后什么也没发生。对我来说,这表明是递归不起作用。
我对其他语言中的递归很熟悉,所以我认为这一定是语法上的问题,但我似乎不能弄清楚。谢谢你的帮助。
问题是,当您将要评估的字符串传递给setTimeout
调用时,评估将在全局上下文中完成(稍后,当该触发时)。因此,您最好(出于许多其他原因)传递实际的函数:
setTimeout(function() { delay(images, 0); }, 2000);
function delay(arr, num) {
document.slide.src = arr[num % 3];
setTimeout(function() { delay(arr, num + 1); }, 1000);
}
在更现代的浏览器中,你可以使用.bind()
方法为函数创建一个函数,该函数预绑定到要使用的this
:
setTimeout(delay.bind({arr: images, num: 0}), 2000);
function delay() {
document.slide.src = this.arr[this.num % 3];
setTimeout(delay.bind({arr: this.arr, num: this.num + 1}), 1000);
}
一种的六种,另一种的半打,但只是作为一个例子,表明有多种方法来做事情。
我会非常怀疑第二个setTimeout
调用。我将通过使用显式函数而不是字符串表达式
setTimeout(function() { delay(arr, number); }, 1000);
更紧凑,并将延迟和参数传递给setTimeout()
:
(function delay(arr, num) {
document.slide.src = arr[num];
setTimeout(delay, 1000, arr, (num + 1) % 3);
})(images, 0);
相关文章:
- setInteval vs setTimeout
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript Recursion?
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- 刷新后,setTimeout将工作或不工作
- 继续使用javascript中的setTimeout
- setTimeout函数能否在其前面的代码执行之前激发
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- 在setTimeout中调用相同的函数
- setTimeout不能太长
- Javascript-SetTimeout导致浏览器冻结
- setTimeout and V8
- 将jQuery对象传递到setTimeout递归函数中
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- 添加一个setTimeout方法会使jQuery悬停方法忽略setTimeout方法中的函数
- JS:setTimeout函数的UI计数
- js setTimeout recursion return-continue
- Javascript recursion settimeout