同步、异步及回调

JavaScript中,JavaScript是单线程,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。于是就有一个概念——任务队列。但是如果一直这样等着排队执行任务,非得等一个任务完成再执行下一个任务,这样就会造成资源浪费,所以就有了同步任务和异步任务。

  • 同步任务
    就是在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
  • 异步任务
    不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行;
    通俗地讲,就是不等结果直接进行下一步,那怎么拿到结果呢,利用回调即可拿到异步的结果
    下面用一个通俗的事例来讲讲同步与异步

A:让黄牛去买票,然后我搁边上站着等(这是同步任务
B:让黄牛去买票(告诉黄牛,你买到票call我),然后我去做其他事情(这是异步任务,括号里表示的是回调

  • 回调call back
    回调是拿到异步结果的一种方式,当然回调也可以拿到同步的结果
function fn1(){
    setTimeout(function(){
        console.log("异步做事")
},1000)
}
function fn2(){
    console.log("同步做事")
}
fn1()
console.log(1)//先打印出1,再打印出“异步做事”,因为fn1是异步函数,不等函数结果出来,直接运行下面的代码
fn2()
console.log(1)//先打印出“同步做事”,再打印出1,因为fn2是同步函数,会等函数运行完,结果出来,再运行下面的代码

至此,同步、异步、回调都有了大致的了解了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,818评论 1 17
  • 最近本人对于js的运行机制,特别是异步,还有回调函数感觉很乱,于是参考了很多有用的博客(博客原文地址会在文末给出)...
    一包阅读 4,704评论 0 2
  • 一、多线程 说明下线程的状态 java中的线程一共有 5 种状态。 NEW:这种情况指的是,通过 New 关键字创...
    Java旅行者阅读 10,202评论 0 44
  • 只有在雨中狂奔过的童年才是真正的童年。
    春天的花朵阅读 1,265评论 0 0
  • 今天晚上和平时不太一样,今天我儿子过来了,所以晚上我早早的就洗漱完,又帮儿子洗澡,小家伙快八岁了,是个超级暖心的小...
    阿姨说什么阅读 2,812评论 0 1

友情链接更多精彩内容