javascript回调函数中的参数来自哪里?
我理解回调函数的本质,因为该函数作为参数传递给另一个函数后会再次执行。但是,我对回调函数中的变量来自何处感到困惑,如下面的node.js示例所示:javascript回调函数中的参数来自哪里?,javascript,node.js,Javascript,Node.js,我理解回调函数的本质,因为该函数作为参数传递给另一个函数后会再次执行。但是,我对回调函数中的变量来自何处感到困惑,如下面的node.js示例所示: router.get('/', function(req, res){ res.render('index', {}); }); 变量req和res是如何填充的?请举例说明如何调用res.render(…)而不声明res,我将不胜感激 它们由调用回调的任何代码填充。在您的示例中,这是Express框架内部的内容,尽管Express在引擎盖下
router.get('/', function(req, res){
res.render('index', {});
});
变量req和res是如何填充的?请举例说明如何调用res.render(…)而不声明res,我将不胜感激 它们由调用回调的任何代码填充。在您的示例中,这是Express框架内部的内容,尽管Express在引擎盖下使用了node
http
库,并为其提供的请求和响应对象添加了其他功能
但在您编写的代码中,您可以创建一个回调函数签名,它接受您想要的任何参数 它们来自于调用时调用普通非回调函数时的同一位置 如果你有这个功能
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
,节点就可以传递函数请求和响应。回调的关键是被调用的函数将其回调
对于
router.get
,它将在查找表中插入路由(路径、方法、回调);当请求传入时,Express将构造响应对象,将请求的路径和方法与查找表中的所有条目相匹配,从匹配条目中获取回调并调用回调(请求,响应)
(传递检测到的请求和创建的响应).参数来自节点运行时库。它们响应实际的网络活动,将请求和响应对象放在一起,然后调用回调函数。参数[1]。呈现(…)
是一个选项。当express检测到/route上的请求时,它将使用req参数和res参数调用您的函数。就像调用常规JavaScript函数一样,比如functionadd(num1,num2){returnnum1+num2};增加(2+3)代码>Express从开始不再依赖于connect。