javascript是一门单线程的语言,无法向java那样Thread,start开辟多个线程,但是js确是有同步和异步的概念和实践。
其实同步和异步只是程序的执行顺序不同而已,正常的从上而下的执行可以看做是同步,而出现改变执行顺序的就是异步操作
最简单的异步操作如setTimeout和setInterval,Ajax,这些属于耗时操作,浏览器会这些程序放入等待队列中,等待执行,
Ajax的success和error,会先执行ajax之外的程序,等Ajax请求返回之后再执行success或error中的回调函数
JavaScript是单线程,所以所有任务都需要排队,这些任务分为同步任务和异步任务,同步任务是在主线程上执行的任务,执行完一个任务才会执行另一个任务,异步任务是 指不进入主线程,而进入任务队列中的任务,等主线程执行完,任务队列通知主线程请求执行任务,这时任务才会进入主线程执行
任务队列是一个事件的队列,包括io设备执行的任务和(如ajax读取数据)一些用户用户产生的事件(如鼠标点击)等等
异步运行机制
所有同步任务都运行在主线程中,主线程之外还有任务队列,异步任务有了运行结果后,会在任务队列中放置一个时间,等主线程中的所有同步任务执行完后,系统读取任务队列中的事件去执行。