【问题标题】:Where do the parameters in a javascript callback function come from?javascript回调函数中的参数来自哪里?
【发布时间】:2016-04-10 01:00:41
【问题描述】:

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

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

如何填充变量 req 和 res?一个解释我如何在不自己声明 res 的情况下调用 res.render(...) 的示例将不胜感激。

【问题讨论】:

  • 参数来自Node运行时库。它们响应实际的网络活动,将请求和响应对象放在一起,然后调用您的回调函数。
  • arguments[1].render(...) 是一个选项。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 当 express 检测到 / 路由上的请求时,它将使用 req 参数和 res 参数调用您的函数。就像您调用常规 JavaScript 函数一样,例如 function add(num1,num2){return num1 + num2};add(2+3);

标签: javascript node.js


【解决方案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,就由节点来传递您的函数请求和响应。

【讨论】:

    【解决方案2】:

    回调的重点在于被调用的函数将其回调

    router.get的情况下,会在查找表中插入路由(路径、方法、回调);当请求进来时,Express 将构造响应对象,将请求的路径和方法与查找表中的所有条目进行匹配,从匹配条目中获取回调并调用callback(request, response)(传递检测到的请求并创建响应)。

    【讨论】:

      【解决方案3】:

      它们被调用回调的任何代码填充。在您的示例中,这是 Express 框架内部的内容,尽管 Express 在后台使用节点 http 库并向其提供的请求和响应对象添加了附加功能。

      但是在您编写的代码中,您可以创建一个回调函数签名,该签名接受您想要的任何参数。

      【讨论】:

      • Express 不再依赖于version 4 的连接。
      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 2022-10-02
      • 2020-03-27
      • 2021-09-12
      • 1970-01-01
      • 2016-11-15
      相关资源
      最近更新 更多