我对下面的代码有点困惑。我不明白的部分是结果参数如何等于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