Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

面试题解JavaScript(四):了解事件循环吗?JavaScript的执行机制是什么样的? #9

Closed
campcc opened this issue Sep 24, 2019 · 0 comments
Labels
Event Loop Event Loop

Comments

@campcc
Copy link
Owner

campcc commented Sep 24, 2019

理解 JavaScript 的执行机制需要先了解下面几个概念。

  • JavaScript是单线程的
  • 执行栈
  • 同步任务与异步任务
  • 事件循环

JavaScript是单线程的

单线程是 JavaScript 这门语言的一大特点,未来也不会改变。在 JavaScript 中,所有的 “多线程” 都是通过单线程模拟出来的,所以尽管 HTML5 实现了 Web Worker,但是 JavaScript 仍然是单线程的。

执行栈

执行栈本质就是一个栈,只是它存放的是任务。

同步任务与异步任务

单线程就意味着所有的任务都需要排队执行,因为主线程只有一个。任务被划分为同步任务和异步任务。你肯定有疑问,为什么任务会被划分为 “同步任务” 和 “异步任务” ?

原因其实很简单,因为如果有一个任务耗时过长,后面的所有任务都需要等待,但是像加载图片音乐,网络请求之类的占用资源大耗时也长的任务,进入主线程后,就会阻塞后面的任务。

而当我们打开一个网站时,可能更希望看到页面更快地渲染出来而不是一直卡着直到图片完全加载完成,所以任务应该有优先级,于是聪明的程序员便将任务分为两类:同步任务和异步任务。

事件循环

@campcc campcc added the Event Loop Event Loop label Oct 7, 2019
@campcc campcc closed this as completed Apr 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Event Loop Event Loop
Projects
None yet
Development

No branches or pull requests

1 participant