匿名回调函数

时间:2016-09-28 16:10:23

标签: javascript asynchronous callback return-value

所以,我在一定程度上理解回调函数。例如,我完全理解这一点:

function finalGuy(x) {
    alert("Final Number: " + x);
}

function secondGuy(x, callback) {
    x = x - Math.sqrt(x);
    callback(x);
}

function firstGuy(callback) {
    var x = parseInt(prompt("Enter a number"));
    x *= x;
    secondGuy(x, callback);
}


firstGuy(finalGuy);

然而,当面对这样的事情时,我似乎无法掌握它。

a(function () {
    b(function () {
        c()
    })
});

有人可以将第一个回调序列转换为第二个回调序列吗?具体来说,将一个结果传递给下一个回调,类似于我在第一个示例中的操作。

1 个答案:

答案 0 :(得分:2)

这两个产生相同的结果

<强> 1

function acceptCallback(callback) {
  callback();
}

function callback() {
  console.log('callback invoked');
}

acceptCallback(callback); // => 'callback invoked'

<强> 2

function acceptCallback(callback) {
  callback();
}

acceptCallback(function() {
  console.log('callback invoked');
});

在第一个示例中传递函数声明,在第二个示例中传递匿名函数

第3。在回调范围内执行操作以传递给另一个回调,又称&#34;回调地狱&#34;

这里没什么特别的,它与前两个例子的语法相同。这对任何人来说都很难理解。

function first(callback) {
  callback('from first');
}

function second(callback) {
  callback('from second');
}

function third(callback) {
  callback('from third');
}

function fourth(n, callback) {
  callback(n * 10);
}

first(function(fromFirst) {
  var a = 5;
  console.log(fromFirst); // 'from first'
  second(function(fromSecond) {
    console.log(fromSecond); // 'from second'
    third(function(fromThird) {
      console.log(fromThird); // 'from third'
      var b = a + 5; // 10
      fourth(b, function(fromFouth) {
        console.log(a, b, fromFourth); // 5, 10, 100
      })
    });
  });
});