-
通常在程序中事件都是顺序执行的,同一时刻只能发生一件事情,如果函数之间有依赖关系,则依赖函数必须等待被依赖函数执行完成之后才能开始执行。
-
JS中的任务是分为同步任务和异步任务两种的。
-
同步任务是在主线程上排队一个一个去执行的任务,异步任务则是将任务加入到任务队列,在主线程上的任务执行完毕之后再处理的。
-
在JS当中即使浏览器有多核也依然是单线程的,即同一时刻只能处理一件事情,称为
主线程
。
Task A --> Task B -->Task C
setTimeout和setInterval是属于典型的异步函数

在上例中主线程的任务就是setTimeout之外的console.log()函数。函数执行时遇到setTimeout会将其加入到任务队列等待主线程上的任务执行完成之后再执行。但这可能会造成阻塞,由于单线程任务的特性,必须等待前一个任务执行完成之后才执行。如下例:

网友评论