Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция не меняет глобальные переменные, считая их локальными (https://javascript.ru/forum/misc/32365-funkciya-ne-menyaet-globalnye-peremennye-schitaya-ikh-lokalnymi.html)

alex_oo7 13.10.2012 13:46

Функция не меняет глобальные переменные, считая их локальными
 
var a_id, a_art, a_tit;
var n = 0;
var e = 0;
 
function fill(){
    try {
        VK.api("audio.get", {offset:"0"}, function(data) {  
            if (data.response) {
                n = (data.response).length;
                document.getElementById("i").value +=  n + "\n";
                a_id = new Array(n);
                a_art = new Array(n);
                a_tit = new Array(n);
                for (var i = 0; i < n; i++) {
                    a_id[i] = data.response[i].aid;
                    a_art[i] = data.response[i].artist;
                    a_tit[i] = data.response[i].title;
                                        document.getElementById("i").value +=  a_id[i] + "\n";
                }
            } else {
                e = 2;
            }
        });
    } catch (err) {
        e = 2;
    }   
}
 
fill();
document.getElementById("i").value +=  a_id[23] + "\n";
document.getElementById("i").value += n + " " + e;
for (var i = 0; i < n; i++)
    document.getElementById("i").value +=  a_id[i] + " " + a_art[i] + " " + a_tit[i] + "\n";


После выполнения функции fill() массивы остаются нетронутыми, а переменная n = 0.
Однако, если проследить выполнение функции, то можно заметить, что он выполняется корректно и верно заполняет массивы. :help:

zebra 13.10.2012 13:51

Читайте про асинхронность

alex_oo7 13.10.2012 14:32

zebra, да это действительно оказалось асинхронная функция....


Часовой пояс GMT +3, время: 03:11.