JS防抖与节流

1. 概念上的区别(从 handle 的有效性分析)

  1. 防抖:多次执行只有最后一次生效,必要参数 [handle, time]
  2. 节流:一段时间内只能执行一次,必要参数 [handle, time]

2. 实现一下

  1. 防抖:
     1 function debounce(handle, time) {
     2     let timer = null;
     3     return function () {
     4         if (timer) {
     5             clearTimeout(timer);
     6             timer = null;
     7         }
     8         timer = setTimeout(() => {
     9             handle();
    10         }, time);
    11     };
    12 }
  2. 节流:
     1 function throttle(handle, time) {
     2     let timer = null;
     3     return function () {
     4         if (!timer) {
     5             handle();
     6             timer = setTimeout(() => {
     7                 clearTimeout(timer);
     8                 timer = null;
     9             }, time);
    10         }
    11     };
    12 }

3. 从执行栈与事件队列的角度深度分析

  1. 防抖是执行了唯一一个被添加到事件队列的 handle,它前面的 handle 随着计时器的移除也都没有进入事件队列,也就不存在进入执行栈了

  2. 节流是 handle 在当前执行栈就直接执行了

  3. 所以,防抖是在下一次执行栈执行,节流是在当前执行栈执行
© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章

没有相关内容!