在项目中会遇到通过ajax、setTimeout等异步操作向后台获取数据,而js自身不会等待数据拿到后再进行下一步操作,所以会导致其他函数无法获取异步操作函数内的数据。例如:
function back(x,y){
var ret;
setTimeout(function(){
ret = x + y;
},1000)
return ret;
};
console.log(back(10,20)); //undefined
或者:
function back(x,y){
setTimeout(function(){
var ret = x + y;
return ret;
},1000)
};
console.log(back(10,20)); //undefined
可以看到无论是哪种return,都无法将获取到的数据返回。
而通过回调函数则可以将需要获取数据的函数作为参数传递给异步操作的函数,可能有点绕,简单来说就是
a函数需要获取数据进行下一步操作,
而b函数是异步获取数据的函数,
那么就可以直接将a函数作为参数传递给b函数,
在b函数内执行a函数。
例如:
function back(x,y,callback){
setTimeout(function(){
var ret = x + y
callback(ret)
},1000)
}
back(10,20,function(a){
//在这里面就可以进行对数据的操作了
console.log(a) //a就是回调的结果,输出30
})