一、事件循环
JavaScript是单线程,同一个时间只能做一件事情,所以执行任务需要排队。如果前一个耗时很长,那么下一个只能等待。
1)两种任务
为了更好的处理任务,JavaScript语言的设计者将任务分为两种:同步任务(synchronous)与异步任务(asynchronous)。
同步任务:在主线程上排队执行的任务。
异步任务:放在“任务队列”(task queue)中,只有当主线程空了,才会将“任务队列”中的任务放到主线程中。
这就是JavaScript的运行机制,这个过程会不断重复,这个机制叫事件循环(Event Loop)。
2)事件循环
事件循环模型可以用下图描述,图片来自Philip Roberts的演讲《Help, I’m stuck in an event loop》:
1. “WebAPIs”内的就是异步任务,包括DOM事件、Ajax和setTimeout。
2. “callback queue”内的是一个任务队列,包括click、load、done。