回调函数
1、前置知识
js的函数中有一个返回值可以拿到一个函数的结果。当我们想要取得这个函数的结果,在另一个函数中调用它,那么调用的这个函数就叫回调函数
2、回调函数和普通写法对比
- 当一个异步请求结果执行完才开始执行函数
//普通函数写法
function myName(name){
//以定时器模拟请求
setTimeout(
()=>{
age(name)
},1000
)
}
// 定义请求执行完后的行为
function age(name){
console.log(name+'今天18岁了');
}
// 调用这个函数
myName('小明')
- 这种写法看起来也可以实现,但我们也可以实现在一个函数中定义
//callback函数
// callback为异步请求执行完后执行的代码
function myName(callback,name){
//以定时器模拟请求
setTimeout(
()=>{
callback(name)
},1000
)
}
// 调用,并传入一个参数
myName((name)=>{
console.log(name+'今天18岁了');
},'小明')
在示例中,我们看到我们利用callback拿到了setTimeout函数返回给的myName函数,并在其他函数中调用了。
3、思考callback函数能做些什么呢?
-
callback函数能使我们的代码更加简洁,不用定义多个单次使用的函数。
-
callback函数可以拿到内部函数返回值
-
callback函数可以对异步函数进行简单的同步处理
-
callback可以对一个函数的内部操作进行多次操作,而不用重复定义
4、常用的应用场景列举
//html部分
<div id="box">
盒子
</div>
//js部分
<script>
var box = document.getElementById('box');
// 给盒子添加点击事件,点击事件会返回一个值.
//这个时候return拿不到里面点击事件的值.
//通过回调函数我们可以拿到这个值.
//并在其他函数中调用他,并多次调用.
function addBoxClick(cb){
box.addEventListener('click',()=>{
cb('小明')
})
}
addBoxClick((name)=>{
console.log(name);
})
</script>