limpopo1992
@limpopo1992

Почему такой порядок интерпретации?

var p = 0;
while (p < b.length) 
                    {    
                   alert(p);
                   var geocoder = new ymaps.geocode('"'+b[p].Adress+'"');  	
alert(p);				   
                   var j = 0;  				
alert(p);				   
                   geocoder.then(
                   function (res) {
				   alert(p);
    	           var nearest = res.geoObjects.get(0);
    	           nearest.properties.set('balloonContentBody', 'тест');
                   myMap.geoObjects.add(res.geoObjects);
        
                                  },
                  function (err) {
        
                                 }
                                );     
                    p++;
                    
                    }

Сначала выдает три 0, потом три 1, потом три 2 и потом почему то 3 3ки, хотя по условию while такого не может быть. b.length содержит 3
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
1. Переменная изменяется в конце цикла, а alert() вызывается 3 раза в начале цикла до изменения переменной. В цикле 3 итерации, а после окончания его работы переменная получает значение 3.

2. В цикле происходит вызов асинхронно исполняемого кода. Это значит, что на момент выполнения этого кода цикл уже закончил свою работу и значение переменной равно 3.

И прекратите употреблять слова, которые не имеют смысла в данном контексте. Причём тут «интерпретация»? Интерпретация происходит до выполнения кода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@IceJOKER
Web/Android developer
Прочитайте про асинхронные запросы, тогда поймете почему порядок нарушается.
Код написан плохо- читать трудно!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы