Другой способ вызова функции в JavaScript

1

Эй, я изучал Узел как часть курса, где они сделали некоторую переменную равной функции

Что-то вроде этого

const authCheck = (req, res, next) => {
    if (req.user) {
        next()
    } else {
        res.redirect("http://localhost:3000/")
    }

}

и затем они назвали это промежуточным программным обеспечением

router.post("/", authCheck, (req, res) =>  {

Теперь я обычно видел людей, называющих функцию, подобную этой authCheck() Хотя это работает, я хотел понять разницу между обоими из них

  • 0
    authCheck() вызовет функцию (кстати, без аргументов) ... authCheck передает функцию в качестве аргумента router.post в вашем примере - и что-то в router.post может вызвать authCheck если требуется
  • 0
    Теперь я обычно видел людей, вызывающих такие функции, как authCheck () - рассмотрим пример, где вы видели это. Это будет неправильно и приведет к ошибке.
Теги:

1 ответ

1

router.post("/", authCheck, (req, res) => { Эта строка фактически не вызывает функцию. Она передавала функцию как переменную в router.post().

Затем эта функция маршрутизатора будет во время вызова authCheck, как только запрос поступит в функцию маршрутизатора.

Итак, вы правы, что функции вызываются путем записи () за именем функции. Помните, что функции называются "первоклассными", что означает, что они могут использоваться как параметры, передаваемые, все, что вы можете сделать с переменной.

Если вы будете писать router.post("/", authCheck(), (req, res) => {, вместо передачи функции authCheck в маршрутизатор, вы сразу же вызываете authCheck и передаете возврат authCheck в router.post().

  • 0
    Шилли, во-первых, большое спасибо за ответ, просто чтобы подвести итог, если мы передадим, скажем, некоторую функцию в качестве function something (authCheck(), somethingElse) параметра function something (authCheck(), somethingElse) возвращение authCheck() будет возвращением something а somethingElse authCheck() никогда не будет выполнено. Следовательно, всякий раз, когда мы передаем функцию в качестве параметра, мы всегда должны использовать 'authCheck`?
  • 0
    Euh? Я не понимаю, что вы имеете в виду. Любая функция может быть передана. authCheck - это просто функция, которая передается в этом примере. Если у вас есть something( authCheck(), somethingElse ) то будет вызвана функция что-то. Требуется два параметра. Второй параметр - это переменная somethingElse. Первый параметр будет тем, что возвращает authCheck. Я ожидаю, что authCheck вернется как объект, содержащий учетные данные пользователя.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню