0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

JAVASCRIPT与单个线程的工作

汽车玩家 来源:今日头条 作者:魏建民 2020-05-05 22:07 次阅读

事件循环是用来理解JavaScript的最重要的方面之一。这篇文章旨在解释JavaScript如何与单个线程一起工作的细节,以及它如何处理异步函数。

JavaScript代码运行是单线程。一次只执行一件事。这实际上是一个非常有用的限制,因为它简化了很多程序,从而不必担心并发问题。

您只需要注意编写代码的方式,避免任何可能阻塞线程的内容,如同步调用或无限循环。

通常,在大多数浏览器中,每个浏览器都有一个事件循环,以使每个进程隔离,并避免web页面具有无限循环或繁重的处理来阻塞整个浏览器。

你最需要担心的是,您的代码将在单个事件循环上运行,并在编写代码时考虑到这一点,以避免阻塞它。

阻止事件循环

任何花费太长时间将控制权返回给事件循环的JavaScript代码都会阻止页面中任何JavaScript代码的执行,甚至阻止UI线程,用户也无法点击,滚动页面等等。

几乎所有JavaScript中的I / O操作都是非阻塞的。网络请求,Node.js文件系统操作等。阻塞是个例外,这就是为什么JavaScript基于回调,以及最近的promises和async / await。

调用堆栈

调用堆栈是LIFO队列(Last In,FirstOut)。事件循环不断检查调用堆栈以查看是否存在需要运行的任何函数。

在执行此操作时,它会将它找到的任何函数调用添加到调用堆栈并按顺序执行每个调用。

一个简单的事件循环说明:

JAVASCRIPT与单个线程的工作

当此代码运行时,首先foo()调用。在foo()我们第一次调用bar(),然后我们调用baz()。

排队功能执行

上面的例子运行特点:JavaScript找到要执行的东西,按顺序运行它们。

让我们看看如何推迟函数直到堆栈清除:

用例setTimeout(()=> {}), 0)是调用一个函数,但是一旦执行了代码中的每个其他函数就执行它。

JAVASCRIPT与单个线程的工作

当此代码运行时,首先调用foo()。在foo()里面我们首先调用setTimeout,bar作为参数传递,然后我们指示它尽可能快地运行,将0作为计时器传递。然后我们调用baz()。

消息队列

调用setTimeout()时,浏览器或Node.js启动计时器。当计时器到期,我们将0作为超时,回调函数立即被放入消息队列中。

消息队列也是用户发起的事件(如单击事件、键盘事件或获取响应)在代码有机会对其作出响应之前排队的地方。或者像onLoad这样的DOM事件。

循环优先处理调用堆栈,它首先处理在调用堆栈中找到的所有东西,一旦调用堆栈中没有任何东西,它就会去获取事件队列中的东西。

我们不必等待像setTimeout,fetch或其他东西这样的函数来完成自己的工作,因为它们是由浏览器提供的,并且它们运行在自己的线程中。

ES6作业队列

ECMAScript 2015引入了Promises使用的作业队列概念(也在ES6 / ES2015中引入)。这是一种尽快执行异步函数结果的方法,而不是放在调用堆栈的末尾。

在当前函数结束之前解析的Prom将在当前函数之后立即执行。

我觉得在游乐园里过山车的比喻很好:消息队列将你放在队列的后面,在所有其他人的后面,你将不得不等待轮到你,而作业队列是快速通票这可以让你在完成上一个之后再骑一次。

JAVASCRIPT与单个线程的工作

这是Promises(和Async / await,它建立在promises上)和普通的旧异步函数setTimeout()或其他平台API 之间的巨大差异。

javascrit的事件循环是这门语言中非常重要且基础的概念。清楚的了解了事件循环的执行顺序和每一个阶段的特点,可以使我们对一段异步代码的执行顺序有一个清晰的认识,从而减少代码运行的不确定性。合理的使用各种延迟事件的方法,有助于代码更好的按照其优先级去执行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1255

    浏览量

    69322
  • javascript
    +关注

    关注

    0

    文章

    516

    浏览量

    53787
收藏 人收藏

    评论

    相关推荐

    javascript属于前端吗

    JavaScript是一种高级编程语言,通常用于网页开发。它是一种脚本语言,可用于在网页上动态交互,提供更好的用户体验。JavaScript是一种广泛使用的技术,几乎所有现代网页都使用它来实现交互性
    的头像 发表于 12-03 11:43 1374次阅读

    javascript的文件扩展名

    JavaScript的文件扩展名是.js。它是一种广泛使用的脚本语言,用于为网页添加交互性和动态功能。在本文中,我将详细介绍JavaScript的文件扩展名.js,包括其起源、用途、特点以及
    的头像 发表于 12-03 11:42 1504次阅读

    javascript的内置对象有哪些

    JavaScript是一门广泛应用于Web开发的脚本语言,它有很多内置对象,用于处理不同的数据类型、执行不同的操作和提供各种功能。在这篇文章中,我将详尽介绍JavaScript的内置对象,以帮助
    的头像 发表于 12-03 11:39 1285次阅读

    javascript的基本语法遵循的标准

    JavaScript是一种脚本语言,用于为网站添加交互性和动态性的功能。它的基本语法遵循ECMAScript标准,这是一种由Ecma国际组织制定的语言标准。本文将详细介绍JavaScript
    的头像 发表于 12-03 11:35 2692次阅读

    javascript的变量中可以包含

    JavaScript是一种强大的编程语言,广泛应用于网页开发和动态网页交互。作为一种灵活的语言,JavaScript允许开发人员声明和操作各种类型的变量。在JavaScript中,变量可以包含
    的头像 发表于 12-03 11:34 673次阅读

    javascript语言的特点

    JavaScript是一种广泛应用于Web开发的脚本语言,具有许多独特的特点和优势。在本篇文章中,我将详尽、详实、细致地解释JavaScript的特点,让你全面了解这门语言。 强大且灵活的功能
    的头像 发表于 12-03 11:31 902次阅读

    javascript基于什么的语言

    JavaScript是一种基于ECMAScript标准的编程语言。它最初是由网景公司(Netscape)的程序员Brendan Eich在1995年开发的。当时,Netscape正致力于开发一种能在
    的头像 发表于 12-03 11:28 1029次阅读

    JavaScript的语法和基本功能

    JavaScript(简称JS)是一种常用的脚本编程语言,广泛应用于网页开发、移动应用开发等领域。正式的JS标准由Ecma国际组织制定并维护,最新的ECMAScript标准定义了JavaScript
    的头像 发表于 12-03 11:15 570次阅读

    怎样开启javascript功能

    JavaScript是一种客户端脚本语言,它可以在网页中实现动态交互和功能增强。在现代网页开发中,几乎所有的浏览器都支持JavaScript,因此,开启JavaScript功能是很简单的。 要开启
    的头像 发表于 12-03 11:13 3532次阅读

    JavaScript的用途和功能

    JavaScript是一种广泛使用的脚本语言,用于为网站添加动态功能和交互性。从创建简单的交互式表单到设计复杂的网页游戏,JavaScript为开发者提供了丰富的功能和灵活的创作能力。它在现代的网页
    的头像 发表于 12-03 11:12 839次阅读

    javascript指什么

    JavaScript是一种高级编程语言,通常用于为网页添加交互功能。它是一种面向对象的语言,旨在通过编写代码来控制网页的行为,使用户能够与网页进行动态交互。JavaScript能够与HTML和CSS
    的头像 发表于 12-03 11:11 834次阅读

    javascript运行环境有哪些

    JavaScript 是一种广泛应用于网页开发的编程语言,它可以在不同的运行环境下运行。以下是一些常见的 JavaScript 运行环境: 浏览器环境: 浏览器是最常见的 JavaScript 运行
    的头像 发表于 11-27 16:11 2477次阅读

    javascript:;怎么解决

    javascript:” 是一个JavaScript伪协议,它通常出现在URL地址栏或链接中,用于执行JavaScript代码。然而,有时它可能会导致一些问题,特别是在一些不支持
    的头像 发表于 11-26 14:39 7224次阅读

    浏览器怎么打开javascript

    浏览器是一种用于浏览和访问互联网页面的应用程序,而JavaScript是一种常用的网页编程语言,用于给网页添加交互和动态效果。本文将详细探讨如何在浏览器中打开JavaScript,并解释
    的头像 发表于 11-26 11:25 2435次阅读

    浏览器需要支持javascript怎么解决

    JavaScript是一种流行的脚本语言,用于对网页进行动态交互和功能增强。几乎所有现代浏览器都支持JavaScript,但在某些情况下,用户可能需要采取措施来确保浏览器支持JavaScript
    的头像 发表于 11-26 11:23 4826次阅读