Я запускаю это в node.js. Почему следующий сегмент кода теряет область действия для cb
var?Почему эта функция javascript потеряла закрытие?
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
Я ожидаю, что вторая линия будет [Function]
Возвращенный функция, вероятно, выполняется либо с JS-х .call()
или .apply()
методы изменения области действия, в которой он запущен. Но я думаю, что cb
будет доступен так же, как path
есть.
Обновление: Обнаружение обратного вызова в функции заставляет его работать. Но мне все равно хотелось бы объяснить, что здесь происходит.
var cb = function() { callback(); };
'call' /' apply 'изменять контекст, а не область. То, что вы говорите, происходит не должно, вы можете ссылаться на фактический код? – david
Работает для меня: http://jsfiddle.net/Squeegy/Uf9nD/ Ваша проблема, вероятно, лежит в другом месте ... –
https://gist.github.com/1503056 строк 33-41. Файл используется как часть набора тестов, в котором используется vowsjs –