引入
众所周知Javascript是一个单线程的机制,虽然可以依托多线程的浏览器实现页面如何实现页面复杂的渲染、事件响应,但仍不会改变其单线程的本质;所以对于js的事件循环机制的了解是一个前端人员的必备基础之一。
1 几个相关的简单概念(以下备注均以javascript为前提)
_ 执行上下文:execution context——js代码执行当前代码段的环境、变量的构成,参考;
_ 函数调用栈-call stack——调度js代码、函数执行先后顺序的,一种有序数据结构,遵循FILO,参考;
_ 队列-queue——调度js代码、函数任务执行先后顺序,一种有序数据结构,遵循FIFO,参考
2 事件循环(Event loop)
以下为简单记录,日后有时间再整理,
涉及主要概念:
1.函数调用栈
2.任务队列:
2.1 task: script、I/O、 UI-rendering、setTimeout、setInterval、setImmediate
2.2 jobs: process、Promise、
主要代码:setTimeout(function(){ console.log(6,"timeout:") }); new Promise(function(resolve){ console.log(1,"promise1"); for(var i=0;i<100;i++){ i==99&&console.log(2,"resolve"); }; console.log(3,"promise2"); }).then(function(resolve){ console.log(5,"then") }); console.log(4,"global")
执行结果:1 "promise1"; 2 "resolve"; 3 "promise2"; 4 "global"; undefined ;//暂时不清楚此处原因 "timeout:"