JavaScript的同步和异步

本文探讨JavaScript中的同步和异步概念。同步意味着任务按顺序执行,而异步允许在执行其他任务的同时处理任务。JavaScript是单线程的,其执行包括执行栈中的同步任务和任务队列中的异步任务。当同步任务完成后,异步任务从任务队列中取出并执行,这一过程构成了事件循环机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是同步和异步

  • 同步:所谓同步,就是前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。
  • 异步:所谓异步,就是在做一件事件的同时,可以去处理其他的事情( 异步函数是setTimeout和setInterval )

执行机制

先看一个例子:

        setTimeout('console.log("qqqq");',0)
        setTimeout('console.log("6666");',1000)
        console.log('hello')
        console.log('javascript')
      

在这里插入图片描述
观察上面的运行结果,我们发现两个定时器都在前面,并且第一个是0毫秒执行,那不应该先输出吗,为什么反而在最后两行代码后执行呢?
首先,我们知道JavaScript的一个特点就是单线程,也就是说一个时间只能做一件事,文章开头也写到settimeout()是一个异步函数,现在就需要讲一下JavaScript的执行栈和任务队列了。

执行栈:整体代码的执行由上而下,编译一句,执行一句

任务队列:同步代码放到执行栈中执行,异步代码会先存放到任务队列中,执行栈代码先执行,异步代码在执行栈执行完后再执行
再看上面的例子就不难理解为什么是这样的执行结果了。
综上,总结一下JavaScript的执行机制:

  1. 先执行执行栈中的同步任务
  2. 异步任务(回调函数)放入任务队列中
  3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。
  4. 由于主线程不断的重复获得任务,执行任务,再获取任务,再执行,所以这种机制被称为“事件循环”(event loop)。
    当然,JavaScript的异步问题不仅仅是settimeout()和setInterval()这两个异步函数,还有其他知识,后面会再补充。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值