异步

作者: Sharp丶TJ | 来源:发表于2021-12-15 18:23 被阅读0次

    一、异步是什么?同步是什么?

    1、如果能够直接拿到结果的情况,就是同步

    2、如果不能直接拿到结果,那就是异步


    二、回调(callback)

    你写给自己使用的函数,不是回调
    你写给别人使用的函数,就是回调

    举例:

    function f1(){}
    function f2(fn){
        fn()
    }
    f2(f1)
    

    分析:
    我自己有没有调用 f1? 答:没有
    我把 f1 传别人(f2)了没有? 答:传了
    f2 调用了 f1 没有? 答: f2 调用了 f1
    那么, f1 是不是我写给 f2 调用的函数呢? 答:是
    所以,f1 就是回调

    抬杠:
    1、如果 f2 它不调用 f1 呢? 答:那你写这个 fn 的参数是吃饱了撑的吗?
    2、如果我给 f2 传的参数不是一个函数呢? 答:会报错


    三、回调和异步的关系和区别

    (1)它们是关联关系

    异步任务需要在得到结果时通知JS来拿结果
    它提前让JS留一个函数地址给浏览器
    异步任务完成时浏览器调用该函数地址即可
    同时把结果作为参数传给这个函数
    而这个函数就是我写给浏览器调用的,所以就是回调函数

    (2)它们的区别
    异步任务需要用到回调函数来通知结果
    但是回调函数不一定只用在异步任务里面
    它也可以用在同步任务中,如:

    array.forEach(n => console.log(n))
    

    就是一个同步回调


    四、如何判断同步和异步

    如果一个函数的返回值处于:
    setTimeout
    AJAX(即:XMLHttpRequest)
    AddEventListener
    这三个东西内部的话,那么这个函数就是异步函数(当然以后还会有,现在先记住这三个)

    补充:AJAX的确可以设置为同步的,但是千万别设置,因为这样会让请求期间,页面卡主什么都做不了

    相关文章

      网友评论

        本文标题:异步

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