我不确定这个技术术语是什么。我有一个带有交互式图形的GUI。用户与GUI进行交互后,我需要执行一些CPU密集型操作。但是,由于用户输入非常频繁,因此我只想在没有用户输入1000毫秒后调用该函数。下面是我使用的模式:
scheduler = (function(){
var timer;
function exec(call, delay){
clearTimeout(timer);
timer = setTimeout(call, delay);
};
return exec;
})()
也就是说,如果对scheduler
的三个调用紧接着进行,那么只会执行最后一个调用:
scheduler(function(){alert('foo')}, 1000);
scheduler(function(){alert('bar')}, 1000);
scheduler(function(){alert('zoo')}, 1000);
看起来它能工作,但感觉有点hacky,我有点担心Javascript setTimeout
的任何注意事项,特别是作用域问题。这种模式是否可靠,可以在更大范围内使用?当我通过settimeout
调用时,我传递给scheduler
的内联函数是否能像往常一样查找其词法作用域中的所有对象?如果我有几个这样的scheduler实例,会发生干扰吗?是否有其他方法可以实现这一点?