我刚开始看javascript,所以希望这会很简单。我想制作一个自动播放图像的幻灯片。这非常简单,并且有几个教程,但由于某些原因,我无法使其工作。这是我的:Javascript递归settimeout
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幻灯片。而且我也有一些证据表明它有效。发生的第一个图像加载。然后加载第二个图像(这意味着原始setTimeout调用必须工作)。然后没有任何反应对我而言,这表明这是递归不起作用。
我对其他语言的递归非常熟悉,所以我认为它只是一个语法的东西或什么,但我似乎无法弄清楚。谢谢你的帮助。
取消引用第二个setTimeout中的参数。那将是我的第一个猜测。 – Cronco 2011-04-05 22:55:51
@Cronco有趣的是,如果我这样做,我不会得到第二个图像...这表明这是什么使图像更改一次。此外,我见过的每个示例都有引号,这就是为什么我放入它们的原因。 – Paul 2011-04-05 22:59:37
引用变量的问题在于定时器正在运行完整字符串'“delay(arr,number)”'而不是将变量到它们的存储值 - 这就是为什么不引用它会起作用的原因(尽管你仍然需要像这样引用它们......'“delay(''+ arr +'',''+ number +'')'。然而,争议点 - Pointy的回答比较好,我只是在解释发生了什么。 – 2011-04-05 23:40:50