我正在尝试学习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) {...
有人可以向我解释一下吗?
答案 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调用使用相同的错误处理。