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

时间:2011-03-14 21:32:36

标签: javascript jquery ajax scope

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

但是,如下面的代码中显示的事件监听器仍然可以访问变量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 个答案:

答案 0 :(得分:2)

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

在您的具体示例中,values在定义click的功能时属于范围,因此即使success完成,它仍然可以访问。

您可以在此处找到更多信息:

答案 1 :(得分:0)

JQuery $符号位于全局范围内。任何东西都可以参考它。您通过$。

到达表单复选框值