//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); }; }// función separada pero usa 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!'); });pero en el siguiente código, si una función separada tiene acceso a otra función separada, formará un cierre
La función auth devuelve es un cierre sobre el contexto de la llamada a auth donde se crea, por lo que tiene acceso al parámetro de name aunque auth haya regresado en el momento en que se llama a la función. No es un cierre sobre cualquier otra cosa relevante; req , res y next son parámetros que recibe, no algo por lo que se cierra.
Entonces, el código general en la pregunta crea dos cierres en dos contextos separados (uno para cada una de las dos llamadas a auth ).
Ese código está bien si el objetivo es crear una función que use el name que está pasando auth más tarde cuando se llama. Es un uso clásico de los cierres.
Relacionado: