Где аргументы функции передаются в - PullRequest
0 голосов
/ 01 мая 2019
app.use(function(req, res, next) {
   console.log(req)
});

Где передаются фактические аргументы этой функции при вызове функции и что дает аргументы этой функции.

То, что я понимаю функцию, сначалаопределение функции

function timesTwo(x){
   return 2*x
}

где x - параметр.Этот блок кода сам по себе не будет выполнять какую-либо функцию, так как он не был вызван и предоставлен аргумент

timesTwo(3) //will return 6

Работает только потому, что я вызвал функцию и передал аргумент 3

Так почему же

function(req, res, next) {
   console.log(req)
});

работает, если я не вызвал / не предоставил аргумент, как в функции timesTwo

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вы передаете функцию обратного вызова, которая будет вызвана позже.

Вот пример:

const app = {
  list:[],
  use(fn) {
    // save  the reference to the function so it can be called later
    this.list.push(fn);
  },
  handle() {
    // The callback function is called here. Notice that I don't know what
    // the function was called, and it doesn't matter if it was a named
    // or anonymous function. I just call it with whatever arguments
    // I want.
    const time = new Date().toISOString();
    this.list.forEach( fn => fn( time ) );
  }
}

setInterval(app.handle.bind(app), 2000);

function myFunction (time) {
  console.log('MYFUNC', time)
};

app.use(myFunction); // Adds a named function
app.use( function(time) { console.log("Anonymous", time) } ); // adds an anonymous function
0 голосов
/ 01 мая 2019

Это не определяемая пользователем функция, это на самом деле промежуточное программное обеспечение (можно также сказать функцию обратного вызова) в экспресс-среде. Аргументы уже установлены / управляются экспресс-структурой. Он будет выполняться автоматически при отправке запроса на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...