javascript阻止函数快速连续执行

javascript阻止函数快速连续执行,javascript,settimeout,Javascript,Settimeout,当代码中的某些函数快速连续执行时,我会遇到问题。我想也许几行javascript可以阻止喜欢触发的人 这就是我希望使用的 function change(){ if(mod == 1 || mod == null){ var mod=2; //function goes here window.setTimeout(function(){var mod=1;}, 500); } 有没有办法做到这一点呢 我也觉得应该有一种更为全局性的方法来解决这个问题

当代码中的某些函数快速连续执行时,我会遇到问题。我想也许几行javascript可以阻止喜欢触发的人

这就是我希望使用的

   function change(){
   if(mod == 1 || mod == null){
   var mod=2;
   //function goes here    
   window.setTimeout(function(){var mod=1;}, 500);
   }
有没有办法做到这一点呢


我也觉得应该有一种更为全局性的方法来解决这个问题,我没有想到。

你可以限制回调或取消回调。有一个很好的(jQuery可选)库可以为您包装所有这些内容:

jQuery throttle/debounce允许您以多种有用的方式对函数进行速率限制。将延迟和回调传递给
$。throttle
返回一个新函数,该函数将每
延迟
毫秒执行一次。将延迟和回调传递给
$。debounce
返回一个新函数,该函数将只执行一次,将多个顺序调用合并为一个在开始或结束时执行的函数

因为你刚才说你想

禁用该功能,直到经过一段时间


听起来您正在寻找debounce用例。

您的解决方案几乎可以正常工作。您的问题是您没有为
mod
创建闭包,而是在setTimeout中创建另一个名为
mod
的变量。这应该起作用:

   function change(){
     if(mod == 1 || mod == null){
       var mod=2;
       //function goes here    
       window.setTimeout(function(){mod=1;}, 500);
     }
   }

我不知道你到底想做什么。。。但是根据你的标题,听起来你在寻找“回调”,实际上是在一段时间过去之前禁用该功能……如果你存储超时句柄,然后调用
窗口。clearTimeout(handle)
,我想这会给你你想要的行为,因为每次连续调用都会重置超时。啊。这看起来比我做的要精简得多。我假设您正在检查
mod
变量,并使用setTimeout重置它?如果是这样,您只需要从setTimeout中使用的内部函数中删除
var
。它正在创建另一个名为
mod
的变量,该变量与外部
mod
无关。。。不过,去盎司代码似乎是一个经过修饰的经过时间函数。我不确定我不能在更小的范围内使用更好的东西,但在全球范围内它肯定是值得的。