什么是异步?什么是同步?
什么是回调?
回调举例1
function f1(){}
function f2(fn){
fn()
}
f2(f1)
分析:
1.我没有调用f1
2.我把f1传给f2
3.f2调用了f1
4.f1是写给f2调用的函数,所以f1是回调
回调举例2
function f1(x){
console.log(x)
}
function f2(fn){
fn('你好')
}
f2(f1)
分析:
1.f2调用了f1,f1是回调
2.f1作为参数,所以fn(‘你好’) => f1(‘你好’)
3.再回头看f1,所以x是参数’你好’
异步和回调的关系
如何判断同步或者异步
如果一个函数的返回值处于下面几个选项的内部,那么这个函数就是异步函数
- setTimeout
- AJAX(即XMLHttpRequest)
-
异步函数举例
举例1
function 摇骰子(){
setTimeout(()=>{
return parseInt(Math.random()*6)+1
},1000)
// return undefined
}
分析1
摇骰子()没有写return,默认return undefined,所以摇骰子没有返回值
定时器里面的函数 return 了一个parsInt函数,返回真正的结果,所以这是一个异步函数
分析2
const n = 摇骰子()
console.log(n)
-
分析3
怎么拿到异步结果? 答:使用回调,写个函数,把函数地址给摇骰子(),然后要求摇骰子函数得到结果后把结果作为参数传给f1
function f1(x){console.log(x)}
摇骰子(f1)
function 摇骰子(fn){
setTimeout(()=>{
fn(parseInt(Math.random()*6)+1)
}.1000)
}