Проблема с областью видимости.
Всем привет! Пытаясь работать с VK open API, столкнулся вот с какой задачей:
Почему не получается отобразить startFrom в консоли? var startFrom = ""; // Глобальная переменная // делаю запрос к vk api function s1() { VK.api("newsfeed.search", {"v":"5.50","q":"привет", "extended":"1", "count":"200", "fields":"photo_50"}, function(data) { // получаю response и извлекаю нужные данные startFrom = data.response.next_from; // next_from - номер следующей страницы, который используется для извлечения максимального количества постов // извлечение параметров профиля var profilesCount = data.response.profiles.length; var profilesStr = ''; for (var i=0; i<profilesCount; i++) { profilesStr +='<img src=' + data.response.profiles[i].photo_50 + '>' + '<a href="https://vk.com/id' + data.response.profiles[i].id + '"' + '>' + data.response.profiles[i].first_name + ' ' + data.response.profiles[i].last_name + '</a>' + '<br/>'; document.getElementById('friends_list').innerHTML = profilesStr + startFrom; // вставляю данные в html } }); } $.when(s1()).done(function () {console.log(startFrom);}); // пытаюсь сделать последовательный вызов, при котором следующая функция выполнится только после завершения предыдущей В html startFrom вставляется без проблем, но вот в консоль я его значение вывести не могу (пишет Uncaught ReferenceError: starFrom is not defined). И еще один момент: если console.log(starFrom); заменить, например, на alert("Hello world!");, то alert выполнится, но до того, как в html будут вставлены результаты запроса, а если alert(startFrom), то всплывает пустое окно. ЧЯДНТ? |
Уже давно ответил на свой вопрос, но тут подумал, что надо бы и сюда написать ответ. Я понимаю, что это элементарные вещи (но не для меня:) ), но вдруг кому-то пригодится решение.
var startFrom; // Всё та же глобальная переменная. function s1() { Vk.api({/* Всё, что написал выше*/}, function(data) { startFrom = data.response.next_from; // Далее идет кусок кода из вопроса. function s2() { //Тут же, внутри функции s1, создаю еще одну функцию console.log(startFrom); // Теперь всё работает } }); } // Функция s1 закончилась s1(); |
Часовой пояс GMT +3, время: 00:25. |