任务队列又称消息队列
函数分二种
1、一种是同步函数,一个接一个的执行
2、一种异步函数,调用者不会立即拿到预期的结果,而是通过一定的手段才能拿到,那这个歌函数就是异步的
任务也分二种
1.同步任务
一个任务执行完,之后才能执行下一个任务
例如console.log() for循环等 promise里的console.log()
2.异步任务
主线程发出一个异步请求,对应的工作线程(例如浏览器事件触发线程,异步http请求),接受请求并告知主线程已收到,主线程继续执行后面的代码,同时工作线程执行异步任务,工作线程完成任务后,将完成信息放到消息队列,主线程通过实践循环过程去取任务消息,然后执行一定的动作
例如promise里面的reslove ,reject,then()
settimeout setinterval
从异步过程的角度看,addEventListener 函数就是异步过程的发起函数,事件监听器函数就是异步过程的回调函数。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。
1 setTimeout(function() {
2 console.log(1);
3 },0);
4 console.log(2);
执行结果2,1。因为只有在执行完第二行以后,主线程空了,才会去任务队列中取任务执行回调函数。
异步的代码和函数,一般会在下一次事件循环中执行