异步
我们都知道Javascript语言的执行环境是"单线程",所谓"单线程"就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。
为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步和异步。
所谓"异步",简单说就是一个任务分成两段,先执行第一段,然后转而执行其他任务,当第一段有了执行结果之后,再回过头执行第二段。
console.log(1);
setTimeout(function () {
console.log(2);
});
console.log(3);
回调 (callback)
在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
回调函数
function add(num1, num2, callback){
var sum = num1 + num2;
callback(sum);
}
function print(num){
console.log(num);
}
add(1, 2, print); //=>3
匿名回调函数
function add(num1, num2, callback){
var sum = num1 + num2;
callback(sum);
}
add(1, 2, function(sum){
console.log(sum); //=>3
});
回调函数的优点和使用场景
优点
1.DRY,避免重复代码。
2.可以将通用的逻辑抽象。
3.加强代码可维护性。
4.加强代码可读性。
5.分离专职的函数。
使用场景
1.异步编程。
2.事件监听、处理。
3.setTimeout、setInterval方法。
4.通用功能,简化逻辑。
参考http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
https://www.cnblogs.com/starof/p/6888178.html