我敢肯定,答案很简单,而且很明显,但是我对下面的代码如何循环感到困惑。如您所见,它只是用于简单的幻灯片放映,而我似乎无法理解的是,幻灯片放映是如何在没有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;

最佳答案

您将方法附加到窗口加载事件处理程序
浏览器在窗口上触发load事件,然后执行changeImg函数
运行changeImg,最后在“时间”持续时间之后为changeImg函数执行setTimeout
“时间”过去了,setTimeout开始了changeImg
运行changeImg,最后在“时间”持续时间之后为changeImg函数执行setTimeout
“时间”过去了,setTimeout开始了changeImg
更改Img运行,...


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

09-17 15:36