【问题标题】:why does statement below loop executes before termination of loop为什么循环下面的语句在循环终止之前执行
【发布时间】:2011-04-22 06:07:06
【问题描述】:

我想知道为什么在打印所有值之前我会收到警报

<script>
    for(var i=0; i<=1000; i++)
    {
        console.log(i);
    }
    alert('Hello');
</script>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    好吧,它没有在循环之前执行,它正在正确执行。

    您的控制台可能更新得有点晚了。

    【讨论】:

      【解决方案2】:

      控制台落后了。循环首先执行。这显示得更好:

      var t = [];
      for(var i=0; i<=1000; i++)
      {
          t.push(i);
      }
      console.log(t.length);
      alert('Hello');
      

      【讨论】:

        【解决方案3】:

        alert()block your browser whilst waiting to be dismissed by the user

        可能在警报出现时它们还没有被写入console。这取决于您的 console 对象是什么。

        顺便说一句,在我的 OS X 上的 Chrome 10 发出警报之前,它们在控制台中显示得很好。

        【讨论】:

          【解决方案4】:

          您是如何执行此操作的?在显示所有数字之前,我的控制台不会显示警报。你的一定是懒惰地渲染输出。所以循环确实在警报之前完成,但日志只写入缓冲区。

          【讨论】:

            【解决方案5】:
            <script>
            INSTRUCTION A;
            INSTRUCTION B;
            INSTRUCTION C;
            </script>
            

            在 javascript 中,指令 B 的执行不依赖于 A 的完成,对于 C 也是如此。

            您可能想尝试以下方法:

            var test = 0;
            var i=0;
            while(test!=1) {
              console.log(i);
              i++;
              if(i==1000) {
                alert("Hi!");
                test=1;
              }
            }
            

            【讨论】:

            • 它应该是这样工作的,但 IME 却没有,为什么会这样?我不确定,但我猜可能是由于指令执行的多线程。所以指令 B 移动到另一个线程,而 C 移动到另一个线程,如果 B 的突发时间明显大于 C,那么你可能会遇到 C 在 B 之前执行的情况。这只是一个猜测,可能不是真的。但事实是它发生了,作为一名开发人员,你学会了忍受这些事情! :)
            猜你喜欢
            • 1970-01-01
            • 2019-07-07
            • 2017-02-08
            • 1970-01-01
            • 2021-11-30
            • 2013-04-13
            • 1970-01-01
            • 1970-01-01
            • 2018-02-01
            相关资源
            最近更新 更多