JS。在不同的功能位置使用setTimeout会导致不同的结果

时间:2017-12-04 08:49:27

标签: javascript settimeout

我学习了JS并且坚持了我无法在网上解释或找到答案的行为。

有两个类似的功能:      

  function count1(){
    if (i<(1e9+1)-1e6){
      setTimeout(count1,0)
    }
    do{
      i++
    } while(i%1e6!=0)

    if (i==1e9){
      console.log('Done1 in '+(Date.now()-start)+'ms')
    }
  }
  function count2(){

    do{
      i++
    } while(i%1e6!=0)

    if (i==1e9){
      console.log('Done2 in '+(Date.now()-start)+'ms')
    }
    if (i<(1e9+1)-1e6){
      setTimeout(count2,0)
    }
  }

  let start=Date.now();
  let i=0;
//  count1();
  count2();

  //why count2 is faster?

</script>

在Chrome中,count1函数需要5000毫秒,而count2需要大约8000毫秒。正如你所看到的,唯一的区别是&#34; setTimeout&#34;代码位于不同的地方。你能不能帮助我理解为什么如此微小的代码差异会导致如此巨大的时间差异。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在第一个函数中,启动计时器,然后与计时器并行执行循环。在第二个功能中,在完成循环(串行)后启动计时器