小编给大家分享一下JavaScript中setTimeout有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
周期定时器:setInterval ()
<强>介绍强>
setInterval()是按照指定的周期来调用定时器,方法会不断的调用定时器,直到使用clearInterval()停止或者窗口关闭。
<强>语法强>
setInterval(代码、毫秒lang)
- <李>
代码:要执行的方法体(必选)
李> <李>毫秒:每隔多少毫秒执行一次(单位是毫秒,如果设置为5000,即每5秒执行一次)(必选)
李> <李>朗:指使用的语言(可选)
李><强>实例强>
通过setInterval实现时钟效果
& lt; html> & lt; body> & lt;输入类型=皌ext"id=癱lock"/比; & lt;脚本类型=拔谋?javascript"比;//每隔1秒执行一次时钟方法 var int=self.setInterval(“时钟()“,1000); 钟()函数 { var d=新的日期(); var t=d.toLocaleTimeString (); . getelementbyid (“clock") value=https://www.yisu.com/zixun/t; }> 脚本 <按钮> & lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=皍tf-8"祝辞 & lt; title>菜鸟教程(runoob.com) & lt;/title> & lt;/head> & lt; body> & lt; p>点击按钮,在等待3秒后弹出“Hello"灵活;/p> & lt;按钮alt=" JavaScript中setTimeout有什么用“>取消定时器
<编辑> 编辑>? ?使用计时器ID来取消计时器回调的发生,每个计时器都会返回一个ID,是为了取消定时器的方法可以获取到相应的计数器。
- <李>
clearInterval (ID)
李> <李>clearTimeout (ID)
李>//设置超时调用 var timeoutId=setTimeout(函数(){ 警报(“你好World"); }, 1000);//取消掉用的代码 clearTimeout (timeoutId);
setTimeout的执行顺序到底是怎样的?
? ?我们都知道,js是单线程语言,所有的多线程都是假象,都是单线程模拟出来的。浏览器是多进程的,而浏览器的内核(渲染进程)是多线程的。
? ?渲染进程中有一个js引擎线程,这个线程是用来处理javaScript脚本的(例如铬的V8引擎),而我们一直说的javaScript是单线程的就是因为这个。
? ?那么问题来了,既然js是单线程的,那setTimeout的异步是怎么实现的呢? js在解析脚本的时候,会将任务分为两大类,同步任务和异步任务,它们在解析时会进入不同的场所执行。
- <李>
同步任务:会进入主线程的执行栈,也就是js引擎线程管理的地方,按照顺序执行
李> <李>异步任务:进入事件表中,并注册函数,当回调函数的条件满足时,就会将回调函数放进事件队列中,也就是任务队列中。
李>? ?当主线程中的任务执行完毕后,也就是执行栈为空时,就会去任务队列中看有没有事件,如果有的话,就进入主线程执行,一直这样循环下去,这就是事件循环机制了,可以参照下面的图理解一下:
? ?也许你对事件循环机制的过程还是不太明白,那么我再解释清楚一点,例如下面这个例子:
console.log(& # 39;开始# 39;) setTimeout(函数(){ console.log (& # 39; settimeout # 39;) }, 5000) console.log(& # 39;结束# 39;)
<强>执行过程:强>
- <李>
开始解析,遇到控制台。日志,是同步任务,进入主线程,直接执行,打印<强> 强>开始,
李> <李>往下走,遇到setTimeout,是异步任务,进入事件表,并注册回调函数;
李> <李>再往下走,遇到控制台。日志,直接执行,打印<强> >强;
李> <李>5 s后,将回调函数放进事件队列,此时执行栈刚好为空,主线程会去任务队列中取出这个回调函数,执行,打印