为什么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
为止。