首页 > js 代码 ;这段代码看不懂,求详细一点的解释;

js 代码 ;这段代码看不懂,求详细一点的解释;

  function repeat(operation, num) {
  if (num <= 0) return
  operation()
  if (num % 10 === 0) {
    setTimeout(function() {
      repeat(operation, --num)
    })
  } else {
    repeat(operation, --num)
  }
}

简单地说就是:现在要做一件事情(即执行函数operation),而且要重复执行很多很多次,次数用num表示。

但是,假设这个操作比较耗时,而且次数很大,比如100000万次,那么就会造成其他任务阻塞。例如,页面无法响应用户。

怎么办呢?办法就是执行10次后歇一下,让其他任务有机会执行。然后再执行10次,再歇一下。如此反复,直到最后。

那么所谓的“歇一下”是怎么实现的呢?答案就是通过setTimeout函数。这个函数的作用就是将指定的函数的延迟执行,或者说放到下一轮或将来的某一轮事件循环中,从而给其他代码的执行让出了机会。

关于事件队列,可参考我专栏的一篇文章


if(num <= 0){

return;

}else{

operation()

}


//我来一句一个注释告诉你~手把手教学,你会喜欢的,没错,我就是来拿分的!!

function repeat(operation, num) {   //这个是一个函数声明,传入两个参数operation, num
  if (num <= 0) return;             //如果num小于等于0  就返回了这个函数,没做什么事
  operation();                      //然后没返回的话,就触发一个叫operation的函数,这个函数在别的地方
  if (num % 10 === 0) {             //如果这个num能整除个10,就进去这个if语句
    setTimeout(function() {         //这里一个计时器,里面放一个函数,repeat也是一个函数,
      repeat(operation, --num);     //但是这个setTimeout缺少了一个延迟参数就是毫秒数
    });
  } else {
    repeat(operation, --num);
  }
}

任务阻塞,事件队列,学到了。。

【热门文章】
【热门文章】