什么是回调函数?

简单的来说,一个函数作为另外一个函数的参数,可以称为回调函数。这个理解其实不完全对,回调的意义根本没有体现出来,何为回调?也就是说一个函数你定义了,你没有马上的去调用它,而是交给了另外一个人去调用,这才属于回调函数。

缺点

直接使用传统回调方式去完成复杂的异步流程,无法避免大量的回调函数嵌套,形成回调地狱。为了避免回调地狱的问题,CommonJS 社区提出了叫做 Promise 的规范,目的是为异步编程提供了一种更合理,更强大的统一解决方案。在 _ES_2015 中被标准化,成为语言规范。

案例

回调函数:

  1. function foo(callback) {
  2. setTimeout(() => {
  3. callback();
  4. }, 3000);
  5. }
  6. foo(function () {
  7. console.log('这就是一个回调函数');
  8. console.log('调用者定义这个函数,执行者执行这个函数');
  9. console.log('其实就是调用者告诉执行者,异步任务结束后应该做什么');
  10. });

回调地狱:

  1. const getData = (url, fn) => {
  2. fn(url + 'xiaoming');
  3. };
  4. getData('/url1', function (data) {
  5. getData('/url2', function (data) {
  6. getData('/url3', function (data) {
  7. getData('/url4', function (data) {
  8. getData('/url5', function (data) {
  9. console.log(data);
  10. });
  11. });
  12. });
  13. });
  14. });