美文网首页
同步、异步及回调

同步、异步及回调

作者: darkTi | 来源:发表于2018-03-22 01:03 被阅读0次

    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是同步函数,会等函数运行完,结果出来,再运行下面的代码
    

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

    相关文章

      网友评论

          本文标题:同步、异步及回调

          本文链接:https://www.haomeiwen.com/subject/bybnqftx.html