Comprender la devolución de llamada personalizada de Passportjs

Estoy experimentando con Passportjs y el código para una devolución de llamada personalizada es:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

Estoy contento con todo este código, excepto la penúltima línea(req, res, next); - ¿Podría alguien explicar por qué estos parámetros se agregan al final? Esta es probablemente más una pregunta de JS que una pregunta de Pasaporte, pero cualquier ayuda es muy apreciada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta