Skip to content

Latest commit

 

History

History
59 lines (43 loc) · 1.66 KB

README.md

File metadata and controls

59 lines (43 loc) · 1.66 KB

JavaScriptSnippet

Some snippets about JavaScript.

Call stack

MessageQueue And EventLoop

  • MDN

    event loop

  • event

    导图要表达的内容用文字来表述的话:

    • 同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。
    • 当指定的事情完成时,Event Table会将这个函数移入Event Queue。
    • 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
    • 上述过程会不断重复,也就是常说的Event Loop(事件循环)。
  • Macrotask, Microtask

  • 浏览器环境

    while (true) {
      queue = getNextQueue()
    	task = queue.pop()
    	execute(task)
    
    	while (microtaskQueue.hasTasks())
    		doMicrotask()
    
    	if (isRepaintTime()) {
    		animationTasks = animationQueue.copyTasks()
    		for (task in animationTasks)
    			doAnimationTask(task)
    		 repaint()
    	}
    }
  • Node环境

    while (tasksAreWaiting()) {
      queue = getNextQueue()
    	while (queue.hasTasks())
    		task = queue.pop()
    		execute(task)
    	while (nextTickQueue.hasTasks())
    		doNextTickTask()
    	while (promiseQueue.hasTasks())
    		doPromiseTask()
    }