第 4 卷
let timer = null;
4 return function(...args){ 5
clearTimeout(timer);
6 if(flag&&!timer){ 7
handler.apply(this,args);
8 } 9
timer = setTimeout(()=>{ 10handler.apply(this,args);
11},ms)
12} 13}
14//demo
| 15 | window.addEventListener('resize',debounce(handler,1000)); |
|---|---|
| 16 | functionhandler(){ |
| 17 | console.log('ok'); |
| 18 | } |
节流
原理:
节流( throttle):不管事件触发频率多高,只在单位时间内执行㇐次。(频繁触发,还是按照时间间隔执行)
应用场景:
- 鼠标不断点击触发,mousedown(单位时间内只触发㇐次)
- 监听滚动事件,比如是否滑到底部自动加载更多,用throttle 来判断
节流实现
- 和防抖不同的是,防抖中是取消定时器,节流中是定时器到时间自动执行,仅仅是将 timer 变量设置为 null
- 时间戳版:第㇐次执行,最后㇐次不执行

手写深拷贝
实现柯里化
柯化是把接受多个参数的
受余下的参数且返回结果的
某种意义上就是预置
1 function add(a, b) { return a + b; } 2
var add1 = function(val) { return add(1 + val) }
柯里化有延迟计算的作用,参数的缓存是通过闭包实现的,所以实现上可以是:
实现发布订阅模式
发布订阅模式本质上是实现㇐个事件总线。只要实现其核心的 on, emit, off, remove, once 等方法即可。
本卷图片
本页图片







































本页图片



























































本页图片





