想象get
实现或多或少像
function get(url, callback) {
var response = they somehow retrieve the response;
var body = they somehow parse the body;
var error = ...;
// they call you back using your callback
callback(error, response, body);
}
如何将这些值计算是无关紧要的(这是他们的实际工作),但是他们只是给你回电话假设你的函数实际上接受给定的顺序三个参数(如果不是,你只是得到一个运行时错误)。
从这个意义上说,它们也可以“接受”你的回调......好吧,把它回叫:)不必担心参数的数量,因为Javascript非常“宽容” - 可以使用任何方法调用方法参数数量,包括比函数期望的参数更少或更多的参数。
以此为一个例子:
// they provide 3 arguments
function get(callback) {
callback(0, 1, 2);
}
// but you seem to expect none
get(function() {
});
的get
假定回调接受三个参数我过去,理应不接受少参数的方法。这工作,虽然三个参数,0
,1
和2
没有绑定到任何正式的回调参数(你不能直接引用它们),他们在那里的arguments
对象,数组状结构:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
再举一个例子
function get(callback) {
callback(0, 1, 2);
}
get(function(a,b,c,d,e) {
});
这一次,我经过回调似乎期待更参数比调用者提供在这里,仍然没有问题。参数绑定连续呼叫参数,a
将获得0,b
将获得1,c
将获得2和d
和e
将得到undefined
内部的回调正文。
这两个例子都表明调用者并不在意你的回调是如何定义的,它的参数个数是否符合期望值。在任何不匹配的情况下,会发生什么最坏的是一个运行时错误:
function get(callback) {
callback(0, 1, 2);
}
get(1);
// Uncaught TypeError: callback is not a function
imo,用JavaScript了解'回调'或关闭。通过node.js,尽快了解'promises'。并且只能在非常有限的情况下使用回调。或命令链可能有用?也许有趣? http://stackabuse.com/avoiding-callback-hell-in-node-js/ –
@Query - 如果下面的答案之一回答了您的问题,请通过点击最佳答案左侧的绿色复选标记来指出。如果不是,那么请对每个答案评论它尚未回答的内容。 – jfriend00