В express.js почему нет ошибки, когда переменная 'app' используется в ее собственном определении? - PullRequest
0 голосов
/ 14 сентября 2018

В express.js мне трудно понять, почему createApplication () не выдает ошибку, учитывая, что он использует app.handle (...) в анонимной функции, которая определяет ту же самую переменную «app».

Пытался подражать этому в jsFiddle, но получил ошибку 'app is undefined', которую я ожидал.Меня беспокоит выражение назначения функции, начинающееся вверху create ():

function createApplication() {

  //New variable 'app' to be defined 
  //by anonymous function

    var app = function(req, res, next) {
      app.handle(req, res, next);        // But 'app' not fully defined yet!
  };

  mixin(app, EventEmitter.prototype, false);
  mixin(app, proto, false);

  // expose the prototype that will get set on requests
  app.request = Object.create(req, {
    app: {\ configurable: true, enumerable: true, writable: true, value: app         }
  })

  // expose the prototype that will get set on responses
  app.response = Object.create(res, {
    app: { configurable: true, enumerable: true, writable: true, value: app 
    }})

  app.init();
  return app;
}

1 Ответ

0 голосов
/ 14 сентября 2018
  1. В JavaScript привязки var поднимаются в верхнюю часть локальной или глобальной области видимости, содержащей определение.Поэтому переменная уже была определена в момент создания замыкания.
  2. Закрытия JS не фиксируют значения связанных переменных при создании экземпляра.Скорее, свободные переменные напрямую связаны с лексической средой и, таким образом, ссылаются на лексическое окружение, поэтому анонимная функция видит значение app, когда оно фактически вызывается.
  3. Неопределенная ошибка переменной, с которой вы столкнулись, возникает при вызове mixin.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...