
回复
点击事件的防连击(防止短时间内多次触发点击) 是非常常见的需求,核心目的是避免因用户快速多次点击导致的业务逻辑异常、重复操作或性能问题。例如:表单提交:如注册、登录、支付、评论发布等。若不防连击,可能导致多次提交相同数据。
解决事件的防连击,需要用到闭包,通过以下例子,了解一下闭包。
通过两个for循环,比较一下
1.for循环是同步执行的,会瞬间完成所有定时器注册,导致所有打印几乎同时执行,因此打印全局的index是遍历后的最终值
2.let关键字会创建块级作用域,每次循环的i都是独立的,因此test2函数打印的index不是最终值
闭包是指有权访问另一个函数作用域中的变量的函数。即使该函数已经执行完毕,其作用域内的变量也不会被销毁,而是会被闭包捕获并保留。
被闭包捕获的变量不会随外部函数的结束而销毁,而是会在闭包内部持续存在
闭包的基础用法举例:在这个例子中,sumClosure是一个闭包,它捕获了外部作用域中的initialValue变量,并在其内部使用这个变量来计算总和
闭包的高级用法:闭包也可以用于更复杂的场景,比如作为其他函数的参数或返回值。例如,您可以创建一个函数,该函数接受一个参数,并返回一个基于该参数计算的闭包
通过对闭包的基本了解,改造一下上面for循环的打印:
防止在短时间内连续触发点击事件,只需要在每次点击时判断与上次点击时间的时间间隔是否小于阈值,然后做相应的处理即可。因此,我们可以利用闭包,记录每个点击事件的最后点击事件,并且能保证多个点击事件不互相影响,利用了闭包的作用域。
代码实现: