具有未命名的'子功能的JavaScript函数'

时间:2016-01-01 21:13:59

标签: javascript

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

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

  },
  function(error) {
    console.log('Ajax failed: ' + error);
  }
);

您可以在此处查看上下文中的代码:https://developer.getpebble.com/guides/js-apps/js-ajax/

在对JavaScript函数进行一些阅读之后,我不明白这样的行是什么:

function(error) {...

它看起来像一个'子功能',在'主要功能'叫做'ajax',但我可以看到该功能没有名字。难道不是一个函数看起来像这样吗?

function myFunction(p1, p2) {...

或(如果我想声明并使用该功能)

var function myFunction(p1, p2) {...

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

它被称为"回调"功能。它没有名称,因为您可以在JavaScript中声明匿名函数。这是允许回调的函数的一个简单示例:

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

  return callback();
}

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

// output: 'hello' 'world'

回调的真正好处是,当事情发生时,可以使用它们异步,例如使用AJAX函数。这是关于异步函数以及如何在JavaScript中处理它们的interesting article from Rising Stack

答案 1 :(得分:1)

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

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

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
);

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