JavaScript是“单线程+异步”的

所谓单线程,是指负责解释并执行JS代码的线程只有一个。我们不妨叫它主线程。

其实还有其他很多线程的,比如进行ajax请求的线程、监控用户事件的线程、定时器线程、读写文件的线程(例如在NodeJS中)等等。

同步和异步是怎么回事?以ajax请求为例:

异步就是:主线程执行到发送ajax请求的代码时,通知负责处理ajax请求的线程(不妨叫做ajax线程):“你给我发个请求吧,我把请求地址和参数都给你了”。然后主线程就不管这事儿了,继续执行后面的代码。等ajax线程收到HTTP响应的时候,就通知主线程:“你的响应来了,快来取吧”。主线程在合适的时候就会去取响应,进行适当的处理。

多说一句:ajax线程通知主线程的方式就是所谓的事件队列和事件循环机制

同步就是:主线程执行到发送ajax请求的代码时,它还是要通知ajax线程帮它发请求,但是它也停下来,啥都不干,等着接收响应。如果响应5秒后才拿到,那么他就等5秒。直到拿到响应后处理完了,才继续解释和执行接下来的代码。

所以,异步就是干某件事情(尤其是耗时的事情)的时候,不干等着,交给别人做,自己干其他事情,同时等通知。同步就是傻傻地等着。

现在你明白了,对于只有一个执行代码的线程的语言,如果没有异步是不行的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 是一门单线程的编程语言,意味着它在任意给定的时刻只能执行一个任务。这是因为 JavaScript 在最初设计时是作为浏览器脚本语言而诞生的,用于操作网页的 DOM(文档对象模型)。 在 JavaScript 中,任务按照它们被调用的顺序执行,这种方式称为同步执行。当一个任务执行时,其他任务必须等待它的完成才能继续执行。这种同步执行的特性可以确保数据的一致性,但也可能导致阻塞,特别是在执行耗时较长的任务时。 为了解决阻塞问题,JavaScript 引入了异步执行的概念。通过异步执行,可以让某些任务在后台执行,而不会阻塞其他任务的执行。常见的异步操作包括网络请求、文件读写和定时器等。在 JavaScript 中,通常使用回调函数、Promise、async/await 等方式来处理异步操作。 回调函数是最早被广泛使用的异步处理方式。通过将一个函数作为参数传递给异步操作,在操作完成后调用该函数来处理结果。然而,使用回调函数嵌套多层会导致代码可读性和维护性的降低,这就是所谓的"回调地狱"问题。 为了解决回调地狱问题,Promise 和 async/await 出现了。Promise 是一种用于处理异步操作的对象,它可以链式调用,避免了回调函数嵌套的问题。而 async/await 是基于 Promise 的语法糖,使异步代码看起来更像同步代码,更易于理解和编写。 总结起来,JavaScript单线程的,但通过异步执行可以提高程序的性能和响应速度。同步执行保证了数据的一致性,而异步执行允许在后台处理耗时操作,提高了用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值