我知道有很多关于回调的信息,但我仍然在努力抓住它。我写了下面的代码,试图看看我是否能理解回调的流程并感觉我很接近,但我仍然缺少一些东西:
var sum = function(a, b){
return a + b;
};
var times = function(x, y){
return x * y;
};
var math = function(sum, times, callback){
console.log(sum + times);
callback(times);
};
math((1,2),(3,3), function(totalizer){
console.log(totalizer);
});
这会将5和3记录到控制台(这似乎是最后两个值(2 + 3)和时间(3)中的最后一个值,当我希望它返回12时9.如果你看到问题请告诉我,我很感谢你的帮助。此外,你有任何帮助澄清我做错的信息都会很棒。
感谢
答案 0 :(得分:1)
您甚至没有调用sum
或times
函数。 The comma operator evaluates both of its operands (from left to right) and returns the value of the second operand. (MDC)
(https://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/)
你试图做的可能就是:
math(sum(1,2),times(3,3), function(totalizer){
console.log(totalizer);
});
这将按照您的预期记录12和9。
编辑以回答您的评论:
您正在混合变量名称和函数名称:
var math = function(sum, times, callback){
console.log(sum + times);
callback(times);
};
与
完全相同var math = function(foo, bar, callback){
console.log(foo + bar);
callback(bar);
};
如果您尝试搜索javascript variable scope
或类似内容,您可能会发现很多帖子可以澄清您的问题。
答案 1 :(得分:1)
回调函数的想法是能够在另一个函数内调用函数。我们来看看您的代码:
// A function called `sum` that takes two parameters
var sum = function(a, b){
return a + b;
};
// A function called `times` that takes two parameters
var times = function(x, y){
return x * y;
};
// A function called `math` that takes three parameters
var math = function(sum, times, callback){
console.log(sum + times);
callback(times);
};
所以你已经定义了三个功能,到目前为止看起来不错,让我们继续:
math((1,2),(3,3), function(totalizer){
console.log(totalizer);
});
所以看起来您正试图从之前调用math
函数并且(如果我错了,请纠正我)看起来您希望参数是这样的:
math(the sum of 1 and 2, the product of 3 and 3, a function that will print its argument){
...
}
因此,为了做到这一点,您需要使用您之前定义的功能。考虑这样的事情:
math(sum(1,2), times(3,3), function(totalizer){
console.log(totalizer);
});
现在,我们正在使用参数math
,sum(1, 2)
和一些回调函数执行times(3, 3)
函数。那么现在让我们来看看下一步会发生什么:
// Your math function:
function(sum, times, callback){
// This will log your sum + time arguments
// will log `12`
console.log(sum + times);
// Now your callback function from earlier will be executed
// using `times`
callback(times);
};
所以我们回到你之前传递的回调:
function(totalizer){
console.log(totalizer);
});
以times
作为参数执行(将记录9
)。
这可能有点长篇大论,但希望这有助于您更好地理解回调及其工作原理。