javascript单线程与异步的关系

我们用js写代码肯定写过异步代码。

为什么js需要异步呢?只写同步代码不可以吗?

js需要异步的“根本原因”是:JS是单线程运行的。就是说,在同一时间只能做一件事,不可以“一心二用”。

比方说,一个Ajax请求由于网络比较慢,需要5秒钟。你如果用同步的话,这5秒钟页面就卡死在这里啥也干不了。

异步的话就好很多了,虽然5秒钟还是得等待,但其他事不耽误做。

我们来看一个关于单线程的例子:

请讲解一下下面代码的执行过程和结果。

var a = true
setTimeout(function() {
  a = false;
}, 100)
while(a) {
  console.log('while执行了')
}

这题非常具有迷惑性,可能有人会觉得,100ms后,由于a变成了false,所以while就中止了,其实并非如此。

大家要搞清楚:JS是单线程的!所以进入while循环后,没有时间(线程)去跑定时器了,所以这个代码跑起来是个死循环。

死循环