Javascript 带有未命名的';子功能';

Javascript 带有未命名的';子功能';,javascript,Javascript,我正在尝试学习JavaScript,但理解一段代码有点困难: // Download data ajax({url: URL, type: 'json'}, function(json) { // Data is supplied here }, function(error) { console.log('Ajax failed: ' + error); } ); 您可以在此处的上下文中看到代码: 在阅读了一些JavaScript函数之后,我不明白下面这些行

我正在尝试学习JavaScript,但理解一段代码有点困难:

// Download data
ajax({url: URL, type: 'json'},
  function(json) {
    // Data is supplied here

  },
  function(error) {
    console.log('Ajax failed: ' + error);
  }
);
您可以在此处的上下文中看到代码:

在阅读了一些JavaScript函数之后,我不明白下面这些行的作用是什么:

function(error) {...
它看起来像一个“子函数”,位于名为“ajax”的“主函数”下,但据我所知,该函数没有名称。函数不应该是这样的吗

function myFunction(p1, p2) {...
或者(如果我想声明并使用函数)

谁能给我解释一下吗?

这叫做“回调”函数。它没有名称,因为您可以在JavaScript中声明匿名函数。下面是一个允许回调的函数的简单示例:

function awesome(callback) {
  console.log('hello');

  return callback();
}

awesome(function() {
  console.log('world');
});

// output: 'hello' 'world'

回调的真正好处是,当事情以异步方式发生时(例如使用AJAX函数),可以使用回调。下面是一个关于异步函数以及如何在JavaScript中处理它们的示例。

这是一个作为参数传递的函数。在这种情况下,当ajax调用成功时,将调用传递的函数,传递的函数需要获取
ajax
函数所期望的参数(json)

它可以有一个名称(为了清楚起见):

也可以单独定义(为了可重用性或清晰性):


通常,按照惯例,它只是一个未命名/匿名的函数,但我多次使用单独定义的函数来避免代码重复,就像对多个ajax调用使用相同的错误处理一样。

它是一个回调函数,在完成某项操作后立即执行,您将此函数传递给另一个函数,为什么你需要这个名字?这实际上是回调机制。上面的一些函数,如ajax(),需要回调函数来报告某些操作的成功和失败。这类函数通常是以上述内联方式编写的。当以内联方式编写函数时,则不提供名称。此外,定义的参数数量取决于调用这些内联函数的主函数。我希望这个解释是足够的,这是非常有意义的-谢谢穆罕默德。
function awesome(callback) {
  console.log('hello');

  return callback();
}

awesome(function() {
  console.log('world');
});

// output: 'hello' 'world'
ajax(
    {url: URL, type: 'json'},
    function success(json) {
        // Data is supplied here
    },
    function failure(error) {
        console.log('Ajax failed: ' + error);
    }
);
var success = function (json) {
    // Data is supplied here
};

var failure = function (error) {
    console.log('Ajax failed: ' + error);
};

ajax(
    {url: URL, type: 'json'},
    success,
    failure
);