javascript - 回调和模块导出有什么区别?

标签 javascript node.js

我看过一篇关于 javascript 回调的文章。 https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced我知道我可以通过阅读文章来理解它。但是,在研究 node.js

中的模块导出时,我对回调感到困惑

回调 - 回调是在另一个函数执行完毕后执行的函数

javascript 中的回调

function doHomework(subject, callback) {
  console.log(`Starting my ${subject} homework.`);
  callback();
}

doHomework('math', function() {
  console.log('Finished my homework');
});

node.js 中的模块导出

//应用程序.js

const logger = require('./logger');

logger.log(10, 10);

//logger.js

const multiply = require('./multiplication');

function log(valueOne, valueTwo) {
  multiply('The result is ', valueOne, valueTwo);
}

module.exports.log = log;

//

function multiply(speech, valueOne, valueTwo) {
  let result = valueOne * valueTwo;

  return console.log(speech + result);
}

module.exports = multiply;

并在我的终端上运行 node app.js

我运行 node app.js 得到的结果是 The result is 100,这是正确的。

但我的问题是 我在 Node 应用程序上所做的方法是否也被视为回调?

最佳答案

Callback - A callback is a function that is to be executed after another function has finished executing

这不是“回调”的正确定义。除非该定义有您没有引用的重要警告,否则我不会继续使用您从中获得的任何资源。

回调的一个相当宽泛的定义是:

  • 回调是您传递给其他事物(作为函数参数、属性值等)的函数,当满足其定义的调用函数的条件时,其他事物将调用该函数。

有些人可能会主张更窄的定义:

  • 回调是您传递给另一个函数的函数,以便另一个函数在满足其定义的回调标准时回调。

回调示例:

  1. DOM 事件处理程序,尽管我们通常称它们为“处理程序”而不是回调。 (广义定义。)
  2. 传递给 Array.prototype.sort 的函数,用于比较数组元素。 (包括广义和狭义的定义。)
  3. 传递给 new Promise 的函数,用于启动 promise 将观察到的异步操作(称为“promise 执行器函数”)。 (包括广义和狭义的定义。)
  4. 您传递给 Array.prototype.map 以转换元素的函数。 (包括广义和狭义的定义。)
  5. 传递给 promise 的 thencatchfinally 方法的函数。
  6. 您传递给 fs.openFile 的函数,当文件打开(或操作失败)时,Node.js 将调用该函数。 (包括广义和狭义的定义。)

...还有许多其他的。

请注意,其中许多(2、3 和 4)在调用它们的函数完成执行之前被调用。

Does the approach that I did on the node app is consider as callback as well?

没有。尽管您在log 中使用了multiply,但它只是您从log 中调用的函数,而不是回调。这将是一个回调:

function multiply(a, b, cb) {
    cb(a * b);
}
function showResult(msg) {
    console.log(msg);
}

multiply(7, 6, showResult);

showResult 在调用 multiply 时用作回调。

关于javascript - 回调和模块导出有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890168/

相关文章:

node.js - 安装 Node v0.8.15 后 npm 在 mac os x 上不工作

javascript - 具有两个以上参数的 url.resolve()

node.js - 为应用程序制作桌面安装程序?

node.js - 使用 Node.js API 上传到 Amazon S3 速度极慢

javascript - fs.readFile 中的 return 语句导致未处理的 promise 拒绝

javascript - 错误 TS2314 : Generic type 'Promise<T>' requires 1 type argument(s)

javascript - JavaScript 中 == 和 === 运算符的确切行为

javascript - 在 Safari 中设置跨域 cookie

Javascript 非常简单的函数返回奇怪的值

javascript - 从关联数组中删除一个键