0

如果 foo 被快速连续调用两次以致第二次调用发生在收到第一个响应之前,它是否安全?如果安全,您能否解释一下正确的“param”值如何与正确的“xmlHttp”响应匹配的机制?

function foo (param)
{
    var xmlHttp = GetXmlHttpRequestObject();

    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        {
            // do something involving param and xmlHttp.responseXML
        }
    }

    xmlHttp.open("GET", "GetAsyncData.ashx", true);
    xmlHttp.send();
}
4

2 回答 2

1

var xmlHttp绑定到函数foo范围。每次调用该函数时,xmlHttp都会设置一个新函数。对于函数参数,同样会发生。参数也以相同的方式绑定到函数范围var xmlHttp。因此,在这种情况下,每次调用函数时,theparam和 thexmlHttp都是绑定到同一个作用域的变量,这就是每个变量都param将匹配到正确xmlHttp响应的原因。

有关更多信息,请阅读有关 javascript 闭包的信息。

于 2013-02-26T15:22:19.923 回答
0

var将变量范围限定为函数。对该函数的每次调用都会创建一个具有该名称的新变量。

于 2013-02-26T15:17:10.580 回答