想象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