我相信这个答案非常简单,而且有些明显,但我对下面的代码是如何循环的有点困惑。 如您所见,它是用于简单的幻灯片放映,我似乎无法理解的是幻灯片放映如何在没有 FOR 或 WHILE 循环的情况下循环播放。 我可以看到该函数是由 SetTimeout 调用的,但我的理解是该方法只调用该函数一次?
<img name="slide" width="400" height="200" />
var i = 0; // Start Point
var images = []; // Images Array
var time = 3000; // Time Between Switch
// Image List
images[0] = "http://lorempixel.com/400/200/animals";
images[1] = "http://lorempixel.com/400/200/sports";
images[2] = "http://lorempixel.com/400/200/food";
images[3] = "http://lorempixel.com/400/200/people";
// Change Image
function changeImg(){
document.slide.src = images[i];
// Check If Index Is Under Max
if(i < images.length - 1){
// Add 1 to Index
i++;
} else {
// Reset Back To O
i = 0;
}
// Run function every x seconds
setTimeout("changeImg()", time);
}
// Run function when page loads
window.onload=changeImg;
- 将方法附加到窗口加载事件处理程序
- 浏览器在窗口上触发加载事件,并执行 changeImg 函数
- changeImg 运行,并在最后在"时间"持续时间之后为 changeImg 函数执行 setTimeout
- "时间"过去了,设置超时开始了变化Img
- changeImg 运行,并在最后在"时间"持续时间之后为 changeImg 函数执行 setTimeout
- "时间"过去了,设置超时开始了变化Img
- 更改 Img 运行,...
因此,通过递归,您正在创建逻辑的间接循环。