注意:凡是需要得到一个函数内部异步操作的结果,如下面几种情况:setTimeout readFile writeFile ajax,这种必须通过回调函数来进行操作。
也就是在调用的位置传递一个函数进来,在封装的函数内部调用传递进来的函数。
下面是错误示范:
第一种不成立的写法:
function add(x,y){
console.log(1);
setTimeout(function(){
console.log(2);
var result = x + y;
return result;
},1000)
console.log(3);
//到这里执行就结束了,不会等到前面的定时器,所以就直接返回默认值undefined
}
console.log(add(10,20));
输出结果为:
第二种不成立的写法:
function add(x,y){
var result;
console.log(1);
setTimeout(function(){
console.log(2);
result = x + y;
},1000)
console.log(3);
//到这里执行就结束了,不会等到前面的定时器,所以就直接返回默认值undefined
return result;
}
console.log(add(10,20));
正确方式:通过回调函数获取函数中异步操作的结果。(回调函数:callback 异步操作:setTimeout)
function add(x,y,callback){
console.log(1);
setTimeout(function(){
var result = x+y;
callback(result);
},1000)
}
add(10,20,function(result){
console.log(result);
})
运行结果: