我對下面的代碼有點困惑。我不明白的部分是結果參數如何等於callback(x+y)
的結果。有人可以解釋這一點,也許這是執行步驟的順序?瞭解具有參數的回調
function add(x,y, callback){
callback(x+y)
}
add(3,4, function(result){
console.log(result) //logs out 7
})
我知道3 + 4是7,但我沒有明確理解結果參數如何獲得這個7值。
我對下面的代碼有點困惑。我不明白的部分是結果參數如何等於callback(x+y)
的結果。有人可以解釋這一點,也許這是執行步驟的順序?瞭解具有參數的回調
function add(x,y, callback){
callback(x+y)
}
add(3,4, function(result){
console.log(result) //logs out 7
})
我知道3 + 4是7,但我沒有明確理解結果參數如何獲得這個7值。
大問題,一旦你明白這一點,它會在打開很多門的JavaScript。
讓我們看不回調會發生什麼:
function add(x, y) {
return x + y;
}
add(1, 2) // returns 3
當你return x + y
,那就是你從功能回來。
現在我們來介紹一個新功能,但不是回調。
function add(x, y) {
return x + y;
}
function logResult(result) {
console.log(result)
}
var result = add(1, 2) // 3
logResult(result) // outputs "3"
正如你看到的,我們稱之爲add
,得到的結果,然後將其傳遞到logResult
,它輸出到控制檯。
如果我們在add
第三個參數傳遞logResult
作爲一個函數,然後我們與result
調用它裏面add
,它有效地是同樣的事情!
function add(x, y, callback) {
var result = x + y;
// we're calling the function that gets passed in
// which is `logResult`
callback(result)
}
function logResult(result) {
console.log(result)
}
add(x, y, logResult) // outputs "3"
現在我們轉回到你的榜樣,從而降低了一切所需的最少代碼:
function add(x, y, cb) {
cb(x + y);
}
add(1, 2, function (result) {
console.log(result)
}); // outputs "3"
在JS你可以通過功能集成到其它功能。接收另一個函數作爲參數的函數可以調用它。這就是你在這裏。您還可以進一步減少這樣的:
function add(x, y, cb) {
cb(x + y)
}
add(1, 2, console.log) // outputs "3"
add(1, 2, console.error) // outputs "3" in error format
而當你告訴他一個函數可以返回一個函數時,他的腦袋就會崩潰! :) –
謝謝你的偉大的解釋。現在我知道更多! – user1142130
的add
函數調用這些參數:
x = 3
y = 4
callback = function(result) { console.log(result) }
該函數總結x+y
。這產生7
。
然後調用callback
功能有這樣的說法:
result = 7
這個函數日誌7
在控制檯
此代碼:
function add(x,y, callback){
callback(x+y)
}
add(3,4, function(result){
console.log(result) //logs out 7
})
是完全一樣的:
function add(x,y, callback){
callback(x+y);
}
function output(result){
console.log(result);
}
add(3,4, output);
因此函數添加需要3個參數,調用add(3,4,output)
時,
x
被分配的參數y
被賦值爲4
callback
被分配的指針功能output
由於在上面的呼叫callback
值3
output
,當你做callback(x+y)
你實際上是撥打output(3+4)
。 沒什麼特別的。這只是javascript處理函數作爲第一類值的結果。
這是一個函數參數,就像任何其他函數參數一樣。將'3'作爲'x'並沒有什麼不同。 – SLaks