事件循环,你真的知道吗?

204 阅读1分钟
  1. 线性执行
  2. 函数调用栈
  3. 事件队列

事件队列就是一个函数队列(函数数组) 每次执行耗时的操作(其他进程处理)都会提供一个回调函数,交给其他进程,当其他进程实现完耗时操作以后 回调函数连同处理的结果 作为参数会投递到 函数队列中

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;
            
        }
    }