Javascript中的异步和回调

异步

我们都知道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

https://juejin.im/post/5a3273baf265da431a433840

https://cnodejs.org/topic/564dd2881ba2ef107f854e0b

你可能感兴趣的:(Javascript中的异步和回调)