1.同步和异步的区别
总结一下就是:能直接拿到结果的就是同步,不能直接拿到结果的就是异步
以AJAX为例:
const fnAjax = (url, callback)=>{
const request = new XMLHttpRequest()
request.open('get', url)
request.onreadystatechange = ()=>{
if(request.readyState === 4 && request.status >= 200 && request.status<300) {
const res = request.response
callback(res)
}
}
request.send()
}
调用fnAjax后里面除了request.onreadystatechange都是依次执行,就是同步的,但是执行完request.send()后,并不能直接得到response,而是必须要等到readyState变为4后,浏览器回头调用request.onreadystatechange函数,才能得到request.response,所以这里的request.onreadystatechange就是异步的。
2.回调callback
写给别的函数调用的函数,就是回调函数
function f1(){}
function f2(fn){fn()}
f2(f1)
3.异步与回调的关系
异步任务需要在得到结果的时候通知js获取结果,这时候就会把结果作为参数传给回调函数,让回调函数把结果送回js,
也就是说异步需要回调来通知结果,但回调却不止用在异步任务里面,回调也可用在同步任务
array.forEach( i => console.log(i)),这里就是同步回调