对于节流阀的理解,举个不恰当的例子,使用节流阀就像在一个宾馆睡觉,一间屋子只能睡一个人。
第一步,进入房间,默认门是开着的(flag=true),所以可以直接进来睡觉;
第二步,为了确保安全,需要将门关上(flag=false);
第三步,睡觉结束(一个事件完成),需要离开让下一个进来睡觉,将门打开(flag=true)。
这样如此反复,确保在睡觉这件事情上,一次只能睡一个人。
代码如下:
1 <button>按钮</button> 2 <script> 3 var btn = document.querySelector('button'); 4 var flag = true; 5 var timer; 6 btn.onclick = function () { 7 clearTimeout(timer)//延时器可以写在if里面,也可以写在外面,如果写在外面,必须清理延时器,否则会创建多个延时器,导致flag很快为true,就一直输出1;如果写在里面,想要执行定时器,必须通过if语句,确保了定时器的安全 8 if (flag == true) { 9 flag = false; 10 console.log(1); 11 } 12 timer = setTimeout(function () { 13 flag = true; 14 }, 2000) 15 } 16 </script>