为什么JavaScript是单线程的?
单线程:同一时间只能做一件事。
JS是单线程语言,与他的用途有关。作为浏览器的脚本语言,JS的主要用途是与用户互以及操作DOM,这就决定了它只能是单线程语言。比如,JavaScript同时有两个线程,一个线程给某个节点上添加内容,一个线程要删除这个节点,那么浏览器应该以哪个线程为准?这就造成了DOM渲染的冲突。
所以JS是单线程的原因就是为了避免DOM渲染的冲突。为了利用多核CPU的计算能力,HTML5提出了web worker标准,允许JS脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以这个新标准并没有改变JavaScript的本质。
JavaScript为什么需要异步?
如果JS不存在异步,就意味着代码必须从上到下执行,如果上一行解析时间很长,那么下面代码的运行就会被阻塞。对于用户而言,阻塞就意味着卡死,这就会导致很差的用户体验。
JavaScript单线程如何实现异步?
通过事件轮询Event Loop实现。