一尘不染

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

node.js

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

router.get('/', function(req, res){
    res.render('index', {});
});

变量req和res如何填充?我们将不胜感激一个示例,该示例解释了如何仅调用res.render(…)而无需自己声明res。


阅读 358

收藏
2020-07-07

共1个答案

一尘不染

它们来自在调用时调用普通非回调函数时来自的位置。

如果您有此功能,

function add (a, b) {
  return a + b
}

您知道在调用add时a和b来自于,

add(1,2)

这与回调的原理相同,不要仅仅因为稍后会调用它而让您的大脑陷入混乱。

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

让我们假装router.get的定义如下

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

以您的示例为例,只要.get调用,就由节点来传递函数请求和响应。

2020-07-07