回调和模块导出有什么区别?
我在javascript中看到过一篇关于回调的文章。 。但是,在研究node.js
中的模块导出时,我对回调感到困惑
回调 - A callback is a function that is to be executed after another function has finished executing
在javascript
回调
function doHomework(subject, callback) {
console.log(`Starting my ${subject} homework.`);
callback();
}
doHomework('math', function() {
console.log('Finished my homework');
});
node.js
中的模块导出
//app.就是
const logger = require('./logger');
logger.log(10, 10);
//logger.就是
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
,这是正确的。
但我的问题是Does the approach that I did on the node app is consider as callback as well?
回调 - 回调是在另一个函数完成执行后执行的函数
这不是“回调”的正确定义。除非这个定义有重要的警告,你没有引用,我不会继续使用你从中得到的任何资源。
一个相当广泛的回调定义是:
- 回调函数是一个函数,它传递给其他函数(作为函数参数,属性值等),当其定义的调用函数的条件满足时,另一个函数将调用。
有些人可能会争论一个较窄的定义:
- 回调是一个函数,您传递给另一个函数,以便在满足其定义的条件时回调另一个函数。
回调示例:
- DOM事件处理程序,虽然我们通常称它们为“处理程序”而不是回调。 (广义定义。)
- 传递给
Array.prototype.sort
以比较数组元素的函数。 (广泛和狭义的定义。) - 您传递给
new Promise
以启动promise将观察的异步操作的函数(称为“promise executor function”)。 (广泛和狭义的定义。) - 传递给
Array.prototype.map
以转换元素的函数。 (广泛和狭义的定义。) - 您传递给promise的
then
,catch
或finally
方法的函数。 - 传递给
fs.openFile
的函数,当文件打开(或操作失败)时,Node.js将调用该函数。 (广泛和狭义的定义。)
......还有很多其他人。
请注意,在调用它们的函数完成执行之前,会调用其中许多(2,3和4)。
我在节点应用程序上执行的方法是否也被视为回调?
不。虽然你在multiply
中使用log
,但它只是你从log
调用的函数,而不是回调函数。这将是一个回调:
function multiply(a, b, cb) {
cb(a * b);
}
function showResult(msg) {
console.log(msg);
}
multiply(7, 6, showResult);
回调和模块导出有什么区别?
我在javascript中看到过一篇关于回调的文章。 。但是,在研究node.js
中的模块导出时,我对回调感到困惑
回调 - A callback is a function that is to be executed after another function has finished executing
在javascript
回调
function doHomework(subject, callback) {
console.log(`Starting my ${subject} homework.`);
callback();
}
doHomework('math', function() {
console.log('Finished my homework');
});
node.js
中的模块导出
//app.就是
const logger = require('./logger');
logger.log(10, 10);
//logger.就是
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
,这是正确的。
但我的问题是Does the approach that I did on the node app is consider as callback as well?
回调 - 回调是在另一个函数完成执行后执行的函数
这不是“回调”的正确定义。除非这个定义有重要的警告,你没有引用,我不会继续使用你从中得到的任何资源。
一个相当广泛的回调定义是:
- 回调函数是一个函数,它传递给其他函数(作为函数参数,属性值等),当其定义的调用函数的条件满足时,另一个函数将调用。
有些人可能会争论一个较窄的定义:
- 回调是一个函数,您传递给另一个函数,以便在满足其定义的条件时回调另一个函数。
回调示例:
- DOM事件处理程序,虽然我们通常称它们为“处理程序”而不是回调。 (广义定义。)
- 传递给
Array.prototype.sort
以比较数组元素的函数。 (广泛和狭义的定义。) - 您传递给
new Promise
以启动promise将观察的异步操作的函数(称为“promise executor function”)。 (广泛和狭义的定义。) - 传递给
Array.prototype.map
以转换元素的函数。 (广泛和狭义的定义。) - 您传递给promise的
then
,catch
或finally
方法的函数。 - 传递给
fs.openFile
的函数,当文件打开(或操作失败)时,Node.js将调用该函数。 (广泛和狭义的定义。)
......还有很多其他人。
请注意,在调用它们的函数完成执行之前,会调用其中许多(2,3和4)。
我在节点应用程序上执行的方法是否也被视为回调?
不。虽然你在multiply
中使用log
,但它只是你从log
调用的函数,而不是回调函数。这将是一个回调:
function multiply(a, b, cb) {
cb(a * b);
}
function showResult(msg) {
console.log(msg);
}
multiply(7, 6, showResult);