每个组件都自己实例化之后,为什么还会互相影响?求大神解答
因为防抖的原理就是通过 debounce(fn, duration)
把函数fn
囚禁起来,由定时器和内部的状态来决定何时执行 fn
。
定时器和内部的状态是保存在一个封闭的作用域里的,debounce
每执行一次就会生成一个这样的作用域,如果整个应用里只执行过一次,而且在不同的组件里被使用,就可能导致匪夷所思的 Bug 。debounce
函数是在模块加载的时候执行的,只会执行一次,各处的引用都是指向同一组状态。
10 回答11k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答5k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
因为图1的写法只会在模块加载时执行一次,它等同于
所以如果页面上有同时存在两个该组件,那么这两个组件的
click
是共享debounce
内部的状态的.由于
timer
是共享的,就会导致——当其中一个组件点击时,debounce
包裹的回调会延迟执行,当在这期间你点击了另一个组件,那么就会清除前一个组件启动的timer
,导致前一个点击回调失效,不过如果你的delay
足够短,一般也是很难出现这种情况