//separate function
function auth(name) {
return function (req, res, next) {
if (req.isAuthenticated() && name && req.user.name === name) next();
else if (req.isAuthenticated() && !name) next();
else res.send(401);
};
}
//单独的函数但使用auth
app.get('/example/a', auth(), function (req, res) {
res.send('Hello from A!');
});
//separate function but uses auth
app.get('/example/b', auth('Francis'), function (req, res) {
res.send('Hello from B!');
});
答案 0 :(得分:1)
但是在下面的代码中,如果单独的函数可以访问另一个单独的函数,它将形成闭包
函数auth
返回是对创建它的auth
调用的上下文的闭包,这就是为什么即使name
它也可以访问auth
参数的原因。 }函数被调用时返回。它不是关闭任何其他相关的; req
,res
和next
是它收到的参数,而不是它关闭的内容。
因此,问题中的整体代码会在两个不同的上下文中创建两个闭包(对auth
的两次调用各一个)。
如果目标是创建一个函数,使用name
稍后在调用它时传递auth
,那么该代码就可以了。这是封闭的经典用法。
相关: