来自回调的Javascript内联函数调用

来自回调的Javascript内联函数调用,javascript,for-loop,callback,inline,Javascript,For Loop,Callback,Inline,我有一个带有回调的函数,用于检查服务器上是否存在文件,返回的结果为“true”或“false”。我的问题是,我在for循环中调用这个“DoesFIleExist”函数,该函数前面计算了“id”。问题在于,每当一个函数调用被解决并尝试调用“AddResultToPage”时,它都会使用上一次for循环迭代的id,而它应该使用调用该函数时给出的id “DoesFileExist”函数将路径和回调作为参数 任何帮助都将不胜感激,因为我已经在网上和这里查看了,但我找到的大多数答案都与按钮和按钮上的事件侦

我有一个带有回调的函数,用于检查服务器上是否存在文件,返回的结果为“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帖子:


将其置于自调用函数中:-

(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设置为last值


对于闭包,id将引用在函数中传递的值,而不是循环中传递的值

您需要闭包,查找它您应该将id从全局空间中取出,并使用var和pass作为参数控制其范围。否则,id可以是任何东西。(其他人可以把它改成一个数字,打破一切)谢谢,这解决了我的问题。欢迎……:)
(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