Javascript 来自回调的内联函数调用
Javascript inline function call from callback
我有一个带有回调的函数,用于检查我的服务器上是否存在文件,返回的结果是 "true" 或 "false"。我的问题是我在一个 for 循环中调用此 "DoesFIleExist" 函数,其中 "id" 在函数中较早计算。问题是,每当一个函数调用被解析并尝试调用 "AddResultToPage" 时,它使用最后一次 for 循环迭代的 id,而当它应该使用调用函数时给出的 id。
"DoesFileExist" 函数将路径和回调作为参数。
任何帮助将不胜感激,因为我在网上和这里看过,但我找到的大部分答案都与按钮和按钮上的事件侦听器有关。
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+id.trim());
AddResultToPage(id,false);
})();
}else{
console.log("the file does not exist");
}
您可以将 specificId 与 let 一起使用(它将保留在您的范围内,它是 ES6)。关于闭包有一个相关的 SO post :
How do JavaScript closures work?
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
let specificId = id;
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+specificId.trim());
AddResultToPage(specificId,false);
})();
}else{
console.log("the file does not exist");
}
把它放在一个自调用函数中:-
(function(id){
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+id.trim());
AddResultToPage(id,false);
})();
}else{
console.log("the file does not exist");
}
})}(id)) // now, your inner code has reference to correct id due to closure
发生的情况是,当收到来自服务器的响应时,for 循环已经完成并且 id 被设置为最后一个值。
使用闭包,id 将引用函数中传递的值而不是循环中的值
我有一个带有回调的函数,用于检查我的服务器上是否存在文件,返回的结果是 "true" 或 "false"。我的问题是我在一个 for 循环中调用此 "DoesFIleExist" 函数,其中 "id" 在函数中较早计算。问题是,每当一个函数调用被解析并尝试调用 "AddResultToPage" 时,它使用最后一次 for 循环迭代的 id,而当它应该使用调用函数时给出的 id。
"DoesFileExist" 函数将路径和回调作为参数。
任何帮助将不胜感激,因为我在网上和这里看过,但我找到的大部分答案都与按钮和按钮上的事件侦听器有关。
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+id.trim());
AddResultToPage(id,false);
})();
}else{
console.log("the file does not exist");
}
您可以将 specificId 与 let 一起使用(它将保留在您的范围内,它是 ES6)。关于闭包有一个相关的 SO post : How do JavaScript closures work?
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
let specificId = id;
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+specificId.trim());
AddResultToPage(specificId,false);
})();
}else{
console.log("the file does not exist");
}
把它放在一个自调用函数中:-
(function(id){
DoesFileExist('/XML/'+id.trim()+'.xml',function(data) {
console.log(id.trim()+" "+data);
if (data == "true") {
(function () {
console.log("adding to page - "+id.trim());
AddResultToPage(id,false);
})();
}else{
console.log("the file does not exist");
}
})}(id)) // now, your inner code has reference to correct id due to closure
发生的情况是,当收到来自服务器的响应时,for 循环已经完成并且 id 被设置为最后一个值。
使用闭包,id 将引用函数中传递的值而不是循环中的值