В следующем фрагменте кода есть ошибка, но он открыл интересный вопрос. Его использование угловой $ http службы, которая возвращает обещание. После разрешения функция обратного вызова не имеет доступа к переменной s1.функция обратного вызова доступа к переменным замыкания?
var ids = [];
ids = ['81074'];
// show what's in
for (var s=0;s<ids.length;s++) {
var s1 = s;
$http.get('http://mydomain.com/api/catalog/product/' + ids[s]).
success(function(data) {
// console.log(s1); <--- reference error
$scope.products[s].setProductData(data);
}).error(function(err){
console.log('--------- error',err);
});
};
s1 дает ReferenceError: s1 не определено в отладчике
И что интересно, у него есть доступ к для цикла переменной s, которая всегда 1 - как и следовало ожидать, так как обещание получил решен после того, как его прирост (отсюда ошибка BTW)
Может кто-нибудь объяснить, почему?
благодаря
Лиор
Я не вижу никакого использования 's1', где происходит ошибка? – Barmar
Ваш код не ссылается на s1 нигде после его определения. Как вы можете получить ссылочную ошибку? – KevSheedy
Я проверил s1 в отладчике, а внутри обратного вызова. код отредактирован. спасибо за замечания – Lior