摘要:定时器机制更正之前的错误认识函数内调用,函数结束。在规定的时间之后,依然会触发的回调。首先要确认几点单线程浏览器多线程单线程原因如果多线程,那么删除或者创建元素,都需要在线程之间通信。因为浏览器不确定是状态。所以,设计之初就是单线程。
js定时器机制
更正之前的错误认识:
1.函数内调用settimeout,函数结束。在规定的时间之后,依然会触发settimeout的回调。
首先要确认js几点:
1.js单线程 vs 浏览器多线程:
单线程原因:如果多线程,那么删除或者创建dom元素,都需要在线程之间通信。因为浏览器不确定是dom状态。所以,js设计之初就是单线程。
好处:简单,没有线程切换维护开销,省内存
2.浏览器是多线程:
javascript引擎线程
界面渲染线程
浏览器事件触发线程
Http请求线程
但是浏览器内核是多线程!浏览器内核实现允许多个线程异步执行,这些线程在内核制控下相互配合以保持同步.假如某一浏览器内核的实现至少有三个常驻线程:javascript引擎线程,界面渲染线程,浏览器事件触发线程,除些以外,也有一些执行完就终止的线程,如Http请求线程,这些异步线程都会产生不同的异步事件,下面通过一个图来阐明单线程的JavaScript引擎与另外那些线程是怎样互动通信的.虽然每个浏览器内核实现细节不同,但这其中的调用原理都是大同小异.
定时器难点:
1.定时器实际延时时间,是无法预知的
理解js异步回调和它的单线程是如何配合工作的:
为什么settimeout会触发回调 ajax回调 click回调
参考资料:http://www.laruence.com/2009/09/23/1089.html
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91616.html
摘要:线程机制与事件机制一进程与线程进程程序的一次执行,它占有一片独有的内存空间。事件响应模块负责事件的管理。当事件发生时管理模块会将回调函数及其数据添加到回调列队中。但是子线程完全受主线程控制,且不得操作。向另一个线程发送消息。 JavaScript线程机制与事件机制 一、进程与线程 进程(process) 程序的一次执行,它占有一片独有的内存空间。 可以通过windows任务管理器查...
摘要:当主线程开始执行异步任务,实际就是执行对应的回调函数。异步任务必须指定回调函数。所以注意的是,只是将事件插入了任务队列,必须等到当前代码执行栈执行完,主线程才会去执行它指定的回调函数。 最近本人对于js的运行机制,特别是异步,还有回调函数感觉很乱,于是参考了很多有用的博客(博客原文地址会在文末给出),整理如下: js单线程 我们都知道,Javascript语言的执行环境是单线程(si...
摘要:引言学习的时候,经常听人说,即是异步的,又是单线程的。所以我们说是异步单线程的。参考从浏览器多进程到单线程,运行机制最全面的一次梳理运行机制详解再谈异步机制详解运行原理解析并发模型与事件循环 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 学习javascipt的时候,经常听人说,javascipt即是异步...
阅读 1542·2021-11-23 10:01
阅读 2948·2021-11-19 09:40
阅读 3193·2021-10-18 13:24
阅读 3444·2019-08-29 14:20
阅读 2955·2019-08-26 13:39
阅读 1222·2019-08-26 11:56
阅读 2637·2019-08-23 18:03
阅读 346·2019-08-23 15:35