引入
众所周知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、
主要代码:
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")
执行结果:
2 "resolve";
3 "promise2";
4 "global";
undefined ;//暂时不清楚此处原因
"timeout:"