异步

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

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的确可以设置为同步的,但是千万别设置,因为这样会让请求期间,页面卡主什么都做不了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容