不明白幻灯片如何在没有设置 FOR 或 WHILE 循环的情况下循环



我相信这个答案非常简单,而且有些明显,但我对下面的代码是如何循环的有点困惑。 如您所见,它是用于简单的幻灯片放映,我似乎无法理解的是幻灯片放映如何在没有 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;
  1. 将方法附加到窗口加载事件处理程序
  2. 浏览器在窗口上触发加载事件,并执行 changeImg 函数
  3. changeImg 运行,并在最后在"时间"持续时间之后为 changeImg 函数执行 setTimeout
  4. "时间"过去了,设置超时开始了变化Img
  5. changeImg 运行,并在最后在"时间"持续时间之后为 changeImg 函数执行 setTimeout
  6. "时间"过去了,设置超时开始了变化Img
  7. 更改 Img 运行,...

因此,通过递归,您正在创建逻辑的间接循环。

最新更新