javascript回调澄清

时间:2016-04-15 19:36:06

标签: javascript callback

我知道有很多关于回调的信息,但我仍然在努力抓住它。我写了下面的代码,试图看看我是否能理解回调的流程并感觉我很接近,但我仍然缺少一些东西:

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.如果你看到问题请告诉我,我很感谢你的帮助。此外,你有任何帮助澄清我做错的信息都会很棒。

感谢

2 个答案:

答案 0 :(得分:1)

您甚至没有调用sumtimes函数。 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);
});

现在,我们正在使用参数mathsum(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)。

这可能有点长篇大论,但希望这有助于您更好地理解回调及其工作原理。