面试题:汇总

1、js是单线程还是多线程?

js 是单线程。只能同一时间执行同一段代码。

就比如说: 我这一句循环代码需要5s来执行 ,那么后面所有的代码都要等着我这个循环结束才能继续执行 。

为什么要单线程?

这是因为跟这门语言的用途有关。JavaScript作为浏览器脚本语言,主要用途是与用户互动,以及操作DOM。
这就决定了它只能是单线程 ,否则会带来很多复杂的同步问题。
为了避免复杂性,这个特性我相信将来也不会改变。

 2、事件循环的机制(Event loop)

主线程只会做一件事,就是从消息队列里面取消息、执行消息。当消息队列为空时,就会等待消息队列变成非空。只有当前的消息执行结束,才会去取下一个消息。
这种机制就叫做事件循环机制Event Loop,取一个消息并执行的过程叫做一次循环。

简单来说:主线程从 任务队列 中读取事件,这个过程是循环不断的,这种运行机制成为事件循环。

也可以简述为:

1.所有的同步任务都在主线程上执行,形成一个执行栈。
2.异步任务会被放置到 异步处理模块中,当异步任务有了运行结果,就将该函数移入任务队列中。
3.一单执行栈中所有同步任务执行完毕,引擎就会读取任务队列,然后将任务队列中的第一个任务压入执行栈中运行。

主线程不断重复第三步,也就是主线程空了们就会去读取任务队列,该过程不断重复,这个就是所谓的  事件循环。

  

原文地址:https://www.cnblogs.com/liumcb/p/14035802.html