为什么javascript setTimeout不起作用,而setInterval对以下程序起作用
我正在尝试执行一个测试数字滑块程序,我发现为什么javascript setTimeout不起作用,而setInterval对以下程序起作用,javascript,jquery,Javascript,Jquery,我正在尝试执行一个测试数字滑块程序,我发现setTimeout不起作用,并且setInterval对下面的程序起作用。我不明白为什么会这样。 请帮帮我 <html> <head> </head> <body> <h1 id="slide"></h1> </body> <script type=text/javascript> (functio
setTimeout
不起作用,并且setInterval
对下面的程序起作用。我不明白为什么会这样。
请帮帮我
<html>
<head>
</head>
<body>
<h1 id="slide"></h1>
</body>
<script type=text/javascript>
(function(){
var i=0,
numbers = [10,20,30,40,50,60],
intervalTime = 3000;
return {
init:function(){
console.log(numbers[i] +"-"+ i);
document.getElementById("slide").innerHTML = numbers[i];
if(i < numbers.length - 1)
i++;
else
i=0;
setTimeout(this.init,intervalTime);
//setInterval(this.init,intervalTime);
}
};
}()).init();
</script>
</html>
(功能(){
var i=0,
数字=[10,20,30,40,50,60],
间隔时间=3000;
返回{
init:function(){
控制台日志(编号[i]+“-”+i);
document.getElementById(“幻灯片”).innerHTML=number[i];
如果(i
问题在于,当第二次调用init
方法时(通过setInterval
调用,处理程序中的此
不会引用匿名函数重新调用的对象。因此,在第二次调用中,此.init
将被取消定义,因此您的回调将不再被调用
当您使用setInterval
时,只需在第一次调用它,然后定期调用相同的回调,这就是它工作的原因(多次调用setInterval
仍然存在错误,这是不需要的)
您可以使用.bind()
传递具有自定义上下文的函数,如
(函数(){
var i=0,
数字=[10,20,30,40,50,60],
间隔时间=500;
返回{
init:function(){
控制台日志(编号[i]+“-”+i);
document.getElementById(“幻灯片”).innerHTML=number[i];
如果(i
setTimeout
将只工作一次。setInterval
工作直到调用clearInterval
为止。