其实回调在我们工作中并不陌生
简单来说,回调函数可以理解为一个函数做为参数传递给另一个函数做处理,然后返回!(callback);
比如:forEach() 遍历方法
let array=['A','B','C','D'];
array.forEeach(function(item,index){
console.log(item);
});
等等.
先说下回调会遇到的明显问题,闭包.一个函数在另一个函数里运行时,会形成闭包.闭包是可以读取包含它的函数(称包含函数)的作用域中的活动变量.
此时如果回调函数中存在this static 指向的问题,就要考虑上面的问题了,(解决办法: 通过call(),apply()解决作用域问题,接下来一篇简单用例子介绍下这两种方法该如何使用),
先来自定义封闭一个简单的自我介绍函数吧,
function introduce(name,age,sex,callback){
if(typeof name === "string" && typeof sex === "string" && typeof age === "number"){
console.log('我叫',name,'今年',age,'岁,我的姓别是',sex);
}else{
console.log('请传正确的参数');
return;
}
let introcs='我叫'+name+'今年'+age+'岁,我的姓别是'+sex;
callback(introcs);
}
introduce('程序员',0,'变性人',function(item){
console.log(item);
});
上面的这个简单的封闭函数,只要输入姓名,年龄,姓别,就可以写一句简短的介绍语句.
Tip:此时回调函数的参数值为什么可以拿到,也就是说在包含函数introduce里执行的时候,它读取了包含函数的参数值,这其实是闭包的效果,一个函数在另一个函数内执行时,被包含函数是可以访问包含函数的活动变量的.
这是我们常用的方式,其实也可以传一个带名称的函数,不仅可以是匿名函数做为形参
我们可以定义一个函数
let showIntro=function (item){
console.log(item);
}
然后将变量showIntro传入到封装好的函数做为参数