1-14使用setTimeout实现间隔调用

1-14使用setTimeout实现间隔调用

问题:为什么调用结束后需要clearTimeout?

描述:setTimeout不是只调用一次吗?,为什么最后一次需要clearTimeout,如果要清理定时器,为什么其他9个定时器不清理?

代码:

  function fun(){

    count ++;

    console.log(count);

    if(count <maxCount){

      setTimeout(fun,1000);

    }

  }

  var count = 0;

  var maxCount = 10;

  setTimeout(fun,1000);

直接这样写不是更加简略吗?有什么错误?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

js是单线程语句,但它可以通过设置超时调用或间歇调用来让代码在特定的时刻执行。setTimeout在执行一次后,如果不再设置另一次,就会自行停止,不会对其他的造成影响,所以没有必要追踪id。我们一般会在最后不用的时候,清除一次。总之这种超时调用是否清除都是可以的。

怎么都被占用了呢 2018-01-15 11:43:55

每次设置的定时器,都重新赋值给了timer变量,最后直接清除timer就可以了。

  • 提问者 WORLD_CONNECTED #1
    但是老师的不是这样哦,老师的直接就setTimeout一个,没有接这个id值,这个id值一直都是第一个定时器的
    2018-01-15 11:45:25
怎么都被占用了呢 2018-01-15 11:37:13

你这样写也是可以的,一般我们在设置了定时器之后,不用的时候就清除一下,这也可以减轻内存的负担。所以建议不执行的时候清除一下。

  • 提问者 WORLD_CONNECTED #1
    如果要清理定时器,为什么其他9个定时器不清理?
    2018-01-15 11:39:34
  • 提问者 WORLD_CONNECTED #2
    var timer ; function fun(){ count ++; console.log(count); if(count <maxCount){ clearTimerout(timer); timer = setTimeout(fun,1000); } } var count = 0; var maxCount = 10; timer = setTimeout(fun,1000);
    2018-01-15 11:40:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师