javascript – 事件监听器和AJAX异步函数变量范围

我有一个问题,可能很简单,但无论如何.在异步函数中注册事件监听器时,我相信当函数运行它时,该函数中的所有值都将不存在.

但是,一个事件监听器,如下面显示的代码仍然可以访问变量值,那是怎么回事?变量是否以某种方式保存在事件监听器中?

$.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);
        });
    }
});

最佳答案 这是因为关闭.函数“关闭”其词法范围内的所有变量,也就是说,一旦定义它的函数返回,它就会保留对它们的访问权限.

在您的特定示例中,当定义了给予click的函数时,值在范围内,因此即使成功完成它也将保持可访问状态.

你会在这里找到更多信息:

> How do JavaScript closures work?

点赞