2013-08-08 2 views
0

Из примера here:Вызов функции без аргументов и аргументов не по умолчанию определен

app.get('/account', ensureAuthenticated, function(req, res){ 
    res.render('account', { user: req.user }); 
}); 

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { return next(); } 
    res.redirect('/login') 
} 

Я как не понимаю ensureAuthenticated работы. Он требует 3 аргумента, аргумент по умолчанию не задан. Но если я называю это без аргументов (в app.get), он выполняет правильно, как это могло быть?

ответ

2

Вы на самом деле не звоните ensureAuthenticated в любом месте вашего кода; вы используете , передавая ссылку функции, и ваша инфраструктура http вызывает функцию позже (когда запрос сделан на /account), передавая правильные аргументы.

Если вы написали ensureAuthenticated() (с круглыми скобками), вы бы назвали его без параметров. Без круглых скобок вы передаете ссылку на функцию.

+0

Ах, понял, спасибо! –

+0

Добро пожаловать! Не забудьте выбрать ответ. –

0

Значения параметров Javascript всегда являются необязательными.

Любые именованные аргументы, которые не были переданы, - это просто undefined.

+0

в 'sureAuthenticated',' res.redirect' вызывается правильно, что означает 'res' ** определено ** ??? –

+0

@PellaeonLin: Это называется Express, который передает три аргумента. – SLaks