Слушатель событий и область действия переменной асинхронной функции AJAX - PullRequest
4 голосов
/ 15 марта 2011

У меня есть вопрос, наверное, очень простой, но что угодно. При регистрации прослушивателя событий внутри асинхронной функции я бы полагал, что все значения в этой функции не будут существовать, когда функция выполнит свой курс.

Однако прослушиватель событий, как показано ниже в коде, все еще может обращаться к переменной values, как это? Сохранена ли переменная в прослушивателе событий?

$.ajax({
    type: "GET",
    cache: false,
    url: "/whatever",
    success: function(data) {
        var values = ["Some Values", "Inside this Object"];

        $("#id :checkbox").click(function() { 
            var allValues = [];

            $('#id3 :checked').each(function() {
                allValues.push($(this).val());
            });

            $("#id2").val(allValues);

            callMe.init(values,allValues);
        });
    }
});

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Это из-за замыканий. Функция «закрывает» все переменные в своей лексической области, то есть она сохраняет доступ к ним после возврата функции, в которой она была определена.

В вашем конкретном примере values находится в области действия, когда определена функция, заданная для click, поэтому она останется доступной даже после завершения success.

Вы найдете гораздо больше информации здесь:

0 голосов
/ 15 марта 2011

Знак JQuery $ находится в глобальной области видимости.Все может ссылаться на это.Вы достигаете значений флажка формы через $.

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