我刚开始学习 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调用必须起作用)。然后什么都没有发生。对我来说,这表明递归不起作用。
我在其他语言中非常熟悉递归,因此我认为它必须只是语法或其他问题,但我似乎无法弄清楚。谢谢任何帮助。
"delay(arr,number)"
而非将变量转换为其存储的值 - 这就是为什么取消引用它会起作用(尽管您仍然需要像这样引用它们..."delay('" + arr + "', '" + number + "')"
)。但无关紧要 - Pointy 的答案更好。我只是解释发生了什么。 - Rob WilliamssetTimeout
会在函数调用栈(递归函数所在的位置)清空时,通过事件循环异步地注册一个处理程序来调用它。 - ggorlen