Переменная область видимости в Jquery / Javascript - PullRequest
0 голосов
/ 05 января 2012

У меня есть следующий код:

var ids = new Array(5);
$(function(){
html5sql.process(sql, 
    function(transaction, results, rowsArray){
        for(var i = 0; i < rowsArray.length; i++){
            ids[i] = rowsArray[i].ID;
                            console.log(ids[i]); //returns the actual value for i
        }
    },
    function(error, statement){
              console.log("Error: " + error.message);       
            }
);
console.log(ids[0]); //returns undefined
});

Как видите, распечатка внутри цикла for печатает правильное значение. С другой стороны, когда я печатаю вне функции, я получаю неопределенное значение. В чем проблема со сферой? Как я могу получить фактическое значение массива вне функции?

Спасибо

1 Ответ

3 голосов
/ 05 января 2012
var ids = [];

$( function () {

    html5sql.process( sql, function () {

        // LINE A: you are populating your array here

    });

    // LINE B: the array is still empty here

});

LINE A появляется над LINE B в исходном коде, но это не обязательно означает, что она выполняется быстрее.Это потому, что LINE A находится внутри выражения функции, которое передается в функцию process.Эта process функция вызовет это выражение функции в будущем.

Таким образом, в основном, LINE B выполняется немедленно, а LINE A выполняется в какой-то момент в будущем.Выражение функции, вероятно, связано (как обработчик) с событием, связанным с SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...