我理解回调函数的本质在于函数在作为参数传递给另一个函数后再次执行。但是,我很困惑回调函数中的变量来自何处,如下面的node.js示例所示:
router.get('/', function(req, res){
res.render('index', {});
});
如何填充变量req和res?一个例子解释了如何在不声明res的情况下调用res.render(...)将非常感激。
答案 0 :(得分:4)
在调用时调用普通非回调函数时,它们来自同一个地方。
如果您有此功能,
function add (a, b) {
return a + b
}
当你调用add时,你知道a和b来自
,这很好add(1,2)
它与回调的原理相同,不要让你的大脑全部扭曲,因为它会在以后被调用。
在某些时候,您将调用传递给router.get的函数,当它执行时,它将收到req
和res
。
让我们假装router.get的定义看起来像这样
router.get = function(endpoint, cb){
//do something
var request = {}
var response = {}
cb(request, response) // invocation time
}
对于您的示例,只要调用.get
,就可以通过节点传递您的函数请求和响应。
答案 1 :(得分:0)
它们会被调用回调的任何代码填充。在您的示例中,这是Express框架内部的内容,尽管Express使用了节点http
库,并为其提供的请求和响应对象添加了其他功能。
但是在你编写的代码中,你可以创建一个回调函数签名,它可以获取你想要的任何参数。
答案 2 :(得分:0)
回调的重点是被调用的函数将其回调。
在router.get
的情况下,它将在查找表中插入路径(路径,方法,回调);当请求进入时,Express将构造响应对象,将请求的路径和方法与查找表中的所有条目相匹配,从匹配条目中获取回调并调用callback(request, response)
(传递检测到的请求并创建响应)。