- 线性执行
- 函数调用栈
- 事件队列
事件队列就是一个函数队列(函数数组) 每次执行耗时的操作(其他进程处理)都会提供一个回调函数,交给其他进程,当其他进程实现完耗时操作以后 回调函数连同处理的结果 作为参数会投递到 函数队列中
js引擎,从队列中取一个函数执行,执行完成后 再从队列中取一个函数执行,直到队列为空,那么就停止 然后如果又有人将事件投递到函数队列中,引起又会运行起来.
最简单的事件循环demo: 事件循环的最简单的核心逻辑
let eventQeues = [];// push shift
let status = {
RUNNING:'running',
STOPED:'stop'
};
let curret_status = status.STOPED;
let runtime = {
push: (evevtFn) => {
eventQeues.push(evevtFn);
if(curret_status == status.STOPED){
runtime.run()
}
},
run:(){
curret_status = status.RUNNING;
let evevtFn;
while(evevtFn = eventQeues.shift()){
evevtFn()
}
curret_status = status.STOPED;
}
}