我看过一篇关于 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
这不是“回调”的正确定义。除非该定义有您没有引用的重要警告,否则我不会继续使用您从中获得的任何资源。
回调的一个相当宽泛的定义是:
- 回调是您传递给其他事物(作为函数参数、属性值等)的函数,当满足其定义的调用函数的条件时,其他事物将调用该函数。
有些人可能会主张更窄的定义:
- 回调是您传递给另一个函数的函数,以便另一个函数在满足其定义的回调标准时回调。
回调示例:
- DOM 事件处理程序,尽管我们通常称它们为“处理程序”而不是回调。 (广义定义。)
- 传递给
Array.prototype.sort
的函数,用于比较数组元素。 (包括广义和狭义的定义。) - 传递给
new Promise
的函数,用于启动 promise 将观察到的异步操作(称为“promise 执行器函数”)。 (包括广义和狭义的定义。) - 您传递给
Array.prototype.map
以转换元素的函数。 (包括广义和狭义的定义。) - 传递给 promise 的
then
、catch
或finally
方法的函数。 - 您传递给
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/