javascript 回调函数中的参数从何而来?

Dan*_*Liu 7 javascript node.js

我理解回调函数的本质在于,该函数作为参数传递给另一个函数后会再次执行。但是,我对回调函数中的变量来自何处感到困惑,如下面的 node.js 示例所示:

router.get('/', function(req, res){
    res.render('index', {});
});
Run Code Online (Sandbox Code Playgroud)

变量 req 和 res 是如何填充的?一个解释我如何只调用 res.render(...) 而不声明 res 自己的例子将不胜感激。

Tyl*_*nis 8

它们来自与调用普通非回调函数时相同的地方,在调用时。

如果你有这个功能,

function add (a, b) {
  return a + b
}
Run Code Online (Sandbox Code Playgroud)

当您调用 add 时,知道 a 和 b 来自于您就可以了,

add(1,2)
Run Code Online (Sandbox Code Playgroud)

这与回调的原理相同,不要因为稍后调用它而让你的大脑变得扭曲。

在某个时候,您传递给 router.get 的函数将被调用,当调用时,它将接收reqres

让我们假设 router.get 的定义是这样的

router.get = function(endpoint, cb){
   //do something
   var request = {}
   var response = {}
   cb(request, response) // invocation time
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,只要.get被调用,节点就可以传递您的函数请求和响应。