我有一个函数,用于在进程运行时向 div 添加状态指示器,并在该进程完成时将其删除。我遇到的问题是当多个函数正在处理并完成时,working_handle 仅删除第一个进程的工作状态。
如果我删除代码的 setTimeout 部分,它可以正常工作,但是我想要延迟它,因为它发生得太快,有点刺耳。
function working_handle(id, state) {
idh = id.replace(/^#/, '');
if (state === true) {
console.log('WORKING'+'-'+idh);
$(id).removeClass('error').addClass('working');
$('#status').removeClass(idh+'-error').addClass(idh+'-working');
} else {
console.log('DONE'+'-'+idh);
setTimeout(function() {
$(id).removeClass('working');
$('#status').removeClass(idh+'-working');
}, 2000);
}
}
最佳答案
在 idh
之前没有 var
(或 const
或 let
),这使其成为 implicit global 。这意味着对函数的每次调用都共享相同的闭包变量并覆盖其值。
要解决该问题,请对其进行声明,以便将其范围限定在函数内:
var idh = id.replace(/^#/, '');
我还建议将 "use strict" pragma 添加到 JS 文件的顶部,这将有助于捕获此类问题。隐式全局变量是个坏消息。
关于javascript - 多次调用函数中的 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50046956/