如果foo快速连续调用两次,以便在收到第一个响应之前发生第二次调用,那么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();
}
答案 0 :(得分:1)
var xmlHttp
绑定到函数foo
范围。每次调用该函数时,都会设置一个新的xmlHttp
。对于功能参数,同样的情况发生。参数也与var xmlHttp
一样绑定到函数范围。因此,在这种情况下,每次调用函数时,param
和xmlHttp
都是绑定到同一范围的变量,这就是为什么每个param
都要进行的与正确的xmlHttp
响应匹配。
有关更多信息,请阅读有关javascript闭包的信息。
答案 1 :(得分:0)
var
将变量作为函数的范围。每次调用该函数都会创建一个具有该名称的新变量。