2011-12-20 4 views
2

Я запускаю это в 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(); }; 
+2

'call' /' apply 'изменять контекст, а не область. То, что вы говорите, происходит не должно, вы можете ссылаться на фактический код? – david

+1

Работает для меня: http://jsfiddle.net/Squeegy/Uf9nD/ Ваша проблема, вероятно, лежит в другом месте ... –

+0

https://gist.github.com/1503056 строк 33-41. Файл используется как часть набора тестов, в котором используется vowsjs –

ответ

2

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