考虑以下代码:
rectangle.js:
var rect = require('./rectangle');
function solveRect(l,b) {
console.log("Solving for rectangle with l = "
+ l + " and b = " + b);
rect(l,b, (err,rectangle) => {
if (err) {
console.log("ERROR: ", err.message);
}
else {
console.log("The area of the rectangle of dimensions l = "
+ l + " and b = " + b + " is " + rectangle.area());
console.log("The perimeter of the rectangle of dimensions l = "
+ l + " and b = " + b + " is " + rectangle.perimeter());
}
});
console.log("This statement after the call to rect()");
};
solveRect(2,4);
solveRect(3,5);
solveRect(0,5);
solveRect(-3,5);
index.js:
rect(l,b, (err,rectangle)
在这一行rect
中,我们调用l,b, err,rectangle
函数并将l,b
传递给它。我可以看到err, rectangle
是什么,但是看不到callback
是什么?
也无法理解{{1}}函数的定义在哪里?是内部功能吗?
答案 0 :(得分:1)
这里的箭头符号可能会造成混淆,尤其是因为它占用了rect
函数的大部分调用。等效于
var callback = function(err,rectangle){
if(err) {
// do stuff
} else {
// do stuff
}
};
rect(l,b, callback);
当我们在index.js内部调用rect(l,b, callback)
时,它会在rectangle.js内部调用该函数,并传入对index.js中的函数的引用(我在上面将其称为回调)。这意味着,当矩形调用callback(new Error( ...
时,它将Error
对象传递给index.js中定义的回调。然后,当它调用callback(null, ...
时,它将为{r {1}}中的err参数传递null
,并为callback
中的矩形参数传递矩形对象。
目前,我们调用rect(l,b, callback)
时没有err或矩形参数,javascript只知道它正在传递一个带有2个参数的函数。
答案 1 :(得分:0)
回调只不过是在像solveRect(2,4, fn)
这样的函数调用中将函数作为参数传递的概念。这里fn
将是一个函数。
您可以内联定义它:
solveRect(2,4, function(err,rectangle){
// your code to handle response or delayed result
});
或作为命名函数:
let fn = function(err,rectangle){
// your code to handle response or delayed result
}
solveRect(2,4,fn)