定义和用法
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
语法
setTimeout(() => {
// code
},millisec)
提示:setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
JavaScirpt线程
先了解下浏览器,浏览器是多线程的。
JavaScript引擎线程
界面渲染线程
浏览器事件触发线程
Http请求线程
JS运行在浏览器中,是单线程的
,每个window一个JS引擎线程。既然是单线程的,的在某个特定的时刻只有特定代码能被执够行,并阻塞其它的代码。(至于ajax的实现这里就不说了。)
timeout 原理
setTimeout的简单的原理:
setTimeout调用的时候,JavaScript引擎会启动定时器timer,大约millisec(ms)以后执行code,当定时器时间到,就把该事件放到主事件队列等待处理。
注意:
浏览器JavaScript线程空闲的时候才会真正执行
为什么呢?因为当JavaScript线程的正在出来其他JavaScript代码时,其实以已经阻塞了其他的代码,其中包括的setTimeout的定时器部分的实现。
millisec参数有什么用?
上诉测试发现,实际应用中。setTimeout的millisec参数不管你设置多少,实际执行都是在线程的最后,因为在执行一个操作的时候,JavaScript肯定是一直把代码执行完后再走setTimeout绑定的code的。
那么问题来了。在没有时间要求限制时,setTimeout(handler,0)
和setTimeout(handler,100)
在单独使用时,好像并没有区别。
millisec一般在多个setTimeout一起使用的时,需要区分哪个先加入到队列的时候才有用,否则都可以设置成setTimeout(handler,0)