上海网站设计首选刻,推广项目网站,百度账户托管公司,肇庆企业自助建站系统javascript引擎#xff0c;它运行在宿主环境中#xff0c;对前端来说#xff0c;一般是web浏览器#xff0c; 代码运行到浏览器。 专业术语: 事件循环#xff1a;浏览器提供了一种机制来处理程序中多个块的执行#xff0c;且执行每块时调用javascript引擎,这种机制被称为…javascript引擎它运行在宿主环境中对前端来说一般是web浏览器 代码运行到浏览器。 专业术语: 事件循环浏览器提供了一种机制来处理程序中多个块的执行且执行每块时调用javascript引擎,这种机制被称为事件循环 特点 1.它的运行是单线程 2.完整运行一个好了再下一次 以下伪代码了解一下概念(摘自《你不知道的javascript》中)根据我的理解再加了一些说明。
// eventLoop是一个用作队列的数组// 先进, 先出 这但很重要就是单线程的意思var eventLoop []; // 假设数组里有很多事件在排队运行了var event;// “永远” 执行while(true) {// 一次tickif(eventLoop.length 0) {// 拿到队列中的下一个事件event eventLoop.shift();// 现在, 执行下一个事件try {event()}catch (err) {// 报错进行下一步处理}}}说明: 对每个tick而言如果在队列中有等待事件那么就会从队列中摘下一个事件并执行。定要清楚setTimeout(…)并没有把你的回调函数挂在事件循环队列中。它所做的是设定一个定时器。当定时器到时后环境会把你的回调函数放在事件循环中这样在未来某个时刻的tick会摘下并执行这个回调。
比如你的setTimeout是1000毫秒后执行也就是1秒但是现在队列里面有有20个项目了 setTimeout函数一秒已经到了但是得排在20个项目后面再执行为了理解如果20项目要执行要2分钟那setTimeout函数就是2分钟1秒执行。 所以setTimeout定时器的精度可能不高你理解了吗