autojs之定时器-setInterval()/setTimeout()

1.两种常用定时器
循环执行
设置定时器【setInterval()】清除定时器【clearInterval()】
单次执行
设置定时器【setTimeout()】清除定时器【clearTimeout()】

2.内存中只能有一个定时器,使用完定时器后要清除
(这个之前不知道在哪看到的,但是好像可以设置多个定时器)

3.定时器是单线程的(我觉得只要理解这个单线程的含义,定时器也就没什么难的了)

setTimeout(fn, x)表示延迟x毫秒之后执行fn,延迟的时间严格来说总是大于x毫秒的,至于大多少,就要看当时JavaScript的执行情况了。
另外,如果多个定时器没有及时清除,就会存在干扰,总之,及时清除已经不需要的定时器是一个好的习惯。
setTimeout注册的函数fn会交给浏览器的定时模块来处理,延迟时间到了就会添加fn这个回调函数到主进程队列当中,但是如果主进程队列前面刚好还有正在执行的没有执行完的代码,则又要花费一定的时间去等待主进程然后再执行fn,所以实际的时间往往是更长的。
引自JavaScript定时器与执行机制,看不懂没关系,我也看不太懂,先入门再深究

以下是个人理解:

代码是顺序运行的,运行到定时器行,开启定时器;
然后继续往下运行,若遇到其他语句或者循环或者sleep或者exit,定时器到时间也要在它们之后才能运行;
我想应该大部分情况下都是在多线程里用定时器吧,这样可以避免上述情况。




以下代码包括循环定时器、单次定时器、清除循环定时器、多个定时器、其他、循环、exit等部分,感觉比较典型了,根据控制变量法,分别注释不同部分,看运行结果是否符合猜想

/*循环定时器1*/
var id1 = setInterval(function(){	//循环定时器id
    log("id1");
}, 2000);
/*循环定时器2*/
var id2 = setInterval(function(){	//可以设置多个定时器
    log("id2");
}, 2000);
//30s后取消循环
setTimeout(function(){			//单次定时器
    clearInterval(id1);				//清除循环定时器id1
}, 30*1000);
/*其他*/
sleep(3000)
log("我是第一");
/*循环*/
for(i=0;i<5;i++){
    log(i);
    sleep(3000)
}
/*退出*/
exit()

仔细理解:

代码运行结果解释

dasda


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

定时器就是这么个东西,可以自己多运行运行看看

就是从上往下按顺序运行,
开启定时器是将定时器的回调函数加入主进程队列,
只有主进程运行完,才运行定时器回调函数

如果对你有帮助的话,不妨动动小手点个赞吧,三连也行哦

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tfnmdmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值