javascript阻止函数快速连续执行

时间:2012-09-18 01:13:35

标签: javascript settimeout

我的代码中的某些函数快速连续执行时出现问题。我想也许几行javascript会阻止触发快乐的人。

所以这就是我希望使用的内容。

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

有没有办法实现这个目的?

我也觉得应该采用一种更全面的方法来解决这个问题。

2 个答案:

答案 0 :(得分:0)

您可以限制或去抖回调。有一个很好的(jQuery可选)库可以为你包装所有这些:jQuery throttle/debounce

  

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

因为您刚评论过想要

  

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

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

答案 1 :(得分:0)

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

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