我了解回调函数的本质,因为该函数在作为参数传递给另一个函数后会再次执行。但是,我对回调函数内部的变量来自何处感到困惑,如以下node.js示例所示:
router.get('/', function(req, res){
res.render('index', {});
});
变量req和res如何填充?我们将不胜感激一个示例,该示例解释了如何仅调用res.render(…)而无需自己声明res。
它们来自在调用时调用普通非回调函数时来自的位置。
如果您有此功能,
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
调用,就由节点来传递函数请求和响应。
问题内容: 我正在尝试将一些参数传递给用作回调的函数,该怎么做? 问题答案: 如果您想要更一般的东西,可以使用arguments变量,如下所示: 但是否则,您的示例可以正常工作(可以在测试器中使用arguments [0]代替回调)
问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步
我需要使用thymeleaf从html调用一个javascript函数。在这个特定的例子中,我有一个student对象,我需要将这个student对象传递给javascript函数(edit())以便在单击按钮时进行处理。 重要代码段:
问题内容: 我有一个函数,将回调函数作为参数,并用一个参数调用它。 我还有一个带有两个参数的函数:和。 我想将函数作为参数传递给,但我也想作为第二个参数()传递给。我怎样才能做到这一点? 问题答案: 只需创建一个包装回调: 或使用ECMAScript 6箭头功能:
问题内容: 我需要在Node.JS应用程序中观察少量目录: 问题在于fs.watch仅将文件名传递给回调函数,而没有包括它所在的目录。我是否可以通过某种方式将额外的参数传递给updated()函数,以便它知道文件在哪里? 我认为我正在寻找类似于Python的工具,如果有帮助的话。 问题答案: 您可以使用:
问题内容: 我有一个内部进行一些修改的函数,它返回一个值。 最初的想法是做这样的事情: 不幸的是,这不适用于Oracle。建议做这种事情的方法是什么? 有没有办法从我的陈述中提取声明的变量? 问题答案: Hibernate Session提供了一种直接访问的方法。然后,您可以创建并用于执行功能: