2 异步
异步
如果能直接拿到结果 ===>>>>>> 那就是同步
比如你在医院挂号,你拿到号才会离开窗口
同步任务可能消耗10毫秒,也可能需要3秒
总之不拿到结果你是不会离开的
如果不能直接拿到结果 ===>>>>>> 那就是异步
比如你在餐厅门口等位,你拿到号可以去逛街
什么时候才能真正吃饭呢 你不知道
所以你可以每10分钟去餐厅问一下(轮询)
你也可以扫码用微信接收通知(回调)
==>回调callback
你写给自己用的函数,不是回调
你写给别人用的函数,就是回调
request.onreadystatechange就是我写给浏览器用的
意思就是你(浏览器)回头调一下这个函数
在中文里,回头也有将来的意思 如我回头请你吃饭
==>回调举例
把函数1 给另一个函数2
function f1(){}
function f2(fn){
fn()
}
f2(f1)
分析:
我调用f1没有? 答:没有调用
我把f1传给f2(别人)了没有?答:传了
f2调用f1了没有?答: f2调用了f1
那么, f1是不是我写给f2调用的函数?答:是
所以,f1是回调
异步和回调的关系
===>>>>关联
异步任务需要在得到结果时通知JS来拿结果
怎么通知 可以让JS留一个函数地址(电话号码)给浏览器
异步任务完成时浏览器调用该函数地址即可(拨打电话)
同时把结果作为参数传给该函数(电话里说可以来吃了)
这个函数是我写给浏览器调用的,所以是回调函数
===>>>区别
异步任务需要用到回调函数来通知结果
但回调函数不一定只用在异步任务里
回调可以用到同步任务里
比如:array.forEach(n=>console.log(n)) 就是同步回调 它一直调用n
===>>>> 判断同步异步
如果一个函数的返回值处于
setTimeout
AJAX(即XMLHttpRequest)
AddEventListener
这三个东西内部,那么这个函数就是异步函数(如果有别的再另说明)
AJAX也可以设置为同步? ===>>>> 傻X才把AJAX设置为同步,这样做会使请求期间页面卡住
异步总结
异步任务不能拿到结果
于是我们传一个回给异步任务
异步任务完成时调用回调
调用的时候把结果作为参数