javascript变量被多个函数调用覆盖

javascript变量被多个函数调用覆盖,javascript,Javascript,我有下面的函数来检查文件的存在。 它被依次调用了4次,检查不同的文件。 它对第一个文件可以正常工作,但对后续文件不起作用。 我想这一定是因为局部/全局变量的位置,但我无法理解。。。有什么想法吗 <script> function checkfile(fileNamePassed){ var timerForLoadingResult=setInterval( function() { checkServerForFile(fileNamePassed); }, 4000

我有下面的函数来检查文件的存在。 它被依次调用了4次,检查不同的文件。 它对第一个文件可以正常工作,但对后续文件不起作用。 我想这一定是因为局部/全局变量的位置,但我无法理解。。。有什么想法吗

 <script>

function checkfile(fileNamePassed){

    var timerForLoadingResult=setInterval( function() { checkServerForFile(fileNamePassed); }, 4000 );
    function checkServerForFile(fileNamePassed) {    
          $.ajax({
                    url: 'https://myserver.com/'+fileNamePassed+'.txt',
                    type:'HEAD',
                    error: function()
                    {

                    },
                    success: function()
                    {
                        $("#"+fileNamePassed).hide();
                        clearInterval(timerForLoadingResult)  
                    }
                });
            }

}

</script>

函数检查文件(fileNamePassed){
var timerForLoadingResult=setInterval(函数(){checkServerForFile(fileNamePassed);},4000);
函数checkServerForFile(fileNamePassed){
$.ajax({
网址:'https://myserver.com/“+fileNamePassed+.txt”,
类型:'头',
错误:函数()
{
},
成功:函数()
{
$(“#”+fileNamePassed.hide();
清除间隔(timerForLoadingResult)
}
});
}
}

checkfile
中删除您的
checkServerForFile
,并将引用传递给 调用checkServerForFile时的
timerForLoadingResult

我编辑了我的答案,以反映一些真实的数据,因为我没有后端,但概念是一样的

删除
timerForLoadingResult
的依赖项并将其作为引用传递,将迫使
checkServerForFile
使用其引用值,而不是它们都共享相同的
timerForLoadingResult

由于
setInterval
返回一个
ID
,您可能还需要更改
timerForLoadingResult
的名称

从:

它返回唯一标识该间隔的间隔ID,因此您可以稍后通过调用clearInterval()将其删除

功能检查文件(idPassed){
var timerForLoadingResult=setInterval(函数(){
checkServerForFile(idPassed、timerForLoadingResult);
}, 4000);
}
函数checkServerForFile(idPassed、TimerForLoadInResult){
$.ajax({
网址:'https://api.github.com/users/justinjmnz',
错误:函数(){
},
成功:功能(数据){
console.log(idPassed+“found!”);//找到了您的文件
$(“#”+idPassed).append(“”);
清除间隔(timerForLoadingResult)
}
});
}
检查文件(“foo”);
支票文件(“bar”);
检查文件(“foobar”)


您发布的代码不会重现问题。请创建一个。当您将checkServerForFile(fileNamePassed)函数从checkFile(fileNamePassed)函数的作用域中取出时会发生什么情况?@daddygames-当场-这就成功了。。。非常感谢您的快速回复/提示:-@Jack不客气。快乐编码。