Javascript 为什么在setInterval的第二次时递减变得大于-1? $(文档).ready(函数(e){ var计数=10; 设置间隔(定时器,1000); 绿色变量=真; 函数计时器() { 如果(计数

Javascript 为什么在setInterval的第二次时递减变得大于-1? $(文档).ready(函数(e){ var计数=10; 设置间隔(定时器,1000); 绿色变量=真; 函数计时器() { 如果(计数,javascript,Javascript,这是一个简单的红绿灯柜台。起初它以1098756542 1的形式运行,下一次它变成108642 0,然后是1074 1,您不需要多次创建/设置它: $(document).ready(function(e) { var count=10; setInterval(timer, 1000); var green = true; function timer() { if (count < 1)

这是一个简单的红绿灯柜台。起初它以1098756542 1的形式运行,下一次它变成108642 0,然后是1074 1,您不需要多次创建/设置它:

$(document).ready(function(e) {

    var count=10;
    setInterval(timer, 1000); 
    var green = true;

        function timer()
        {

              if (count < 1)
              {
                 count = 10;
                 setInterval(timer, 1000);

                 green ? green=false : green = true;                    
              }

              $('#tl').empty();

              if(green)
                $('#tl').append(count).css('color', '#090');

              else
                $('#tl').append(count).css('color', '#F00');

              count = count - 1;
        }
});
if(计数<1)
{
计数=10;
//setInterval(计时器,1000);<--删除此行
绿色?绿色=假:绿色=真;
}

我意识到@cherniv已经给出了答案,这是原始代码中的一个输入错误,但它想知道为什么它会像你说的那样给出答案

起初它以10987654321的形式运行,下一次它变成1086420,然后是10741

所以,基本上您是在做一些类似于调用函数的函数的事情(几乎类似于递归,但javascript上下文使其有所不同)。函数
setInterval(timer,1000)
再次从内部调用

因此,它第一次深入到10级给你

10987654321

下一次当
count<1
为真时,
setInterval(timer,1000)
已在后台运行的功能几乎立即启动(也就是说),两者之间的时间差非常小(因为它们也开始以相同的方式启动)

因此,这导致
计数器
变量减少2,而不是1,相差很小。给你

1086420

以此类推,在接下来的时间间隔中,时间间隔连续减少


希望这有助于理解它为什么会这样做:)

您不必调用
setInterval(timer,1000)再次
绿色=!绿色
比绿色好?绿色=假:绿色=真
     if (count < 1)
         {
             count = 10;
             // setInterval(timer, 1000); < -- remove this line

             green ? green=false : green = true;                    
         }