Почему эта функция javascript теряет область закрытия? - PullRequest
2 голосов
/ 20 декабря 2011

Я запускаю это в node.js.Почему следующий сегмент кода теряет область видимости для cb var?

Client.prototype.post = function(path, data, callback) {
  var self = this;
  var cb = callback;
  return function() {
    console.log(path);
    console.log(cb);
    rest.post(self.baseUrl + path, data).on('complete', cb || this.callback);
  }
};

Вызов этой функции выглядит следующим образом client.post('/user', {}, function() {}); и выдает следующее:

/user
undefined

Iя ожидаю, что вторая строка будет [Function] Возвращенная функция, вероятно, выполняется с помощью методов js .call() или .apply(), чтобы изменить область, в которой она выполняется. Но я думаю, что cb будет доступенточно так же, как path есть.

Обновление: Включение обратного вызова в функцию заставляет его работать.Но я все еще хотел бы объяснить, что здесь происходит.

var cb = function() { callback(); };

1 Ответ

2 голосов
/ 21 декабря 2011

Работает как положено.Вопрос неправильный, все комментарии верны.Кто-то должен научиться кодировать.

...