回调函数其实就是一种数据类型
函数可以作为参数、返回值、
函数很灵活,无所不能 一般情况下,函数作为参数的目的是为了获取函数内部的异步操作
- javascript 单线程、事件循环
console.log(1);
setTimeout(()=>{
console.log(2);
},1000)
console.log(3);
- 结果:1 3 2
不会等待 异步
eg:
// 函数里面一个异步
function add(x,y) {
console.log(1);
setTimeout(function () {
console.log(2);
var ret=x+y;
return ret
},1000)
console.log(3)
//到这里执行就结束了,不会等待定时器之家打印undermine x y没有值了
}
console.log(add(10,10));
- 结果
1
3
undefined
2
eg
var ret;
function add(x,y) {
console.log(1);
setTimeout(function () {
console.log(2);
ret=x+y;
},1000)
console.log(3)
}
add(10,20);
setTimeout(function () {
console.log(ret);
1
3
2
30(利用全部变量修改后获取,函数封装性破环不支持)
注意:凡是需要得到一个函数内部异步操作的结果
- setTimeout
- readFile
- writeFile
- ajax
这种情况必须通过:回掉函数来解决 不是立即使用 - 最终
function add(x,y,callback) {
console.log(1);
setTimeout(function () {
console.log(2);
ret=x+y;
callback(ret);
},1000)
console.log(3)
}
add(10,20,function (ret) {
console.log(ret);
});
- 结果
1
3
2
30
总结:是把异步的数据通过一个函数把他作为这个函数的全局变量后调用