我有一个函数,我曾经在进程运行时向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);
}
}
答案 0 :(得分:1)
var
之前您没有const
(或let
或idh
),这使其成为implicit global。这意味着对函数的每次调用都共享相同的闭包变量并覆盖其值。
要解决此问题,请声明它以使其范围限定为函数:
var idh = id.replace(/^#/, '');
我还建议将"use strict" pragma添加到JS文件的顶部,这将有助于捕获这样的问题。隐含的全局变量是坏消息。