JavaScript 设计之初就是单线程的,这样的设计是为了避免在操作 DOM 时出现复杂的同步问题。如果是多线程同时对 DOM 进行修改,就可能导致页面渲染混乱,比如一个线程要删除某个元素,另一个线程却要修改这个元素的属性。因此 JavaScript 执行引擎一次只能处理一个任务,按顺序依次执行代码。
虽然有 Web Worker 和 Worker Threads 等机制,但这些 “线程” 与传统意义上的多线程语言中的线程不同。Worker 线程和主线程之间的通信是通过消息传递的方式,它们不能直接共享内存,这与 C、Java 等多线程语言中线程可以直接共享内存不同。而且,JavaScript 代码的核心执行逻辑仍然是单线程的,Worker 只是提供了一种在后台执行任务的方式,不会改变 JavaScript 语言本身单线程执行的本质。
异步不同于多线程。
异步请看: js异步:Promise Async