我意识到这更是一个普遍的问题,但是我在这里已经阅读了类似的答案,但是找不到更多的概述。我是回调的新手,我试图了解何时应使用它们。

MDN Web文档包含此示例。

function greeting(name) {
  alert('Hello ' + name);
}

function processUserInput(callback) {
  var name = prompt('Please enter your name.');
  callback(name);
}

processUserInput(greeting);

但是,我在努力将其比以下方法更有益,因为我没有将Greeting函数作为参数传递?
function greeting(name) {
  alert('Hello ' + name);
}

function processUserInput() {
  var name = prompt('Please enter your name.');
  greeting(name);
}

processUserInput();

最佳答案

简单来说,您可以说回调是一种提前询问问题(或请求任务)的方法,即完成此操作后(通常是在结果中)。重点是搁置稍后要执行的功能,通常是因为您现在没有所需的输入来执行它们。
您的实现与MDN的两个主要区别是,您的维护较难维护,因此很难进行测试。

1.维护/可重用性

假设您将几千行代码放入一个代码库中,然后需要更改processUserInput()的功能。与更改函数processUserInput()相比,更改或编写新的回调函数要容易得多。如果processUserInput稍微复杂一点,这将是显而易见的。这也意味着与您的实现不同,MDN在各种情况下都更加有用。您可以在不同的情况下重复使用它,例如说再见,大写名称等,只需编写不同的回调以插入processUserInput()即可。

2.测试/简化的推理

MDN的实现更容易理解。假设函数processUserInput(greeting)可能会返回一个问候,而不是假设processUserInput()会更容易。这使测试更加容易,因为您始终可以确保MDN实现始终在给定输入的情况下返回相同的输出。

09-17 15:59