本质:这是优化代码执行代码的一种手段。
稳定:n秒后执行事件。如果在n秒内反复触发,则重新计算时间。
好处:它可以确保用户经常触发某些事件时不会经常执行回调,并且只能执行一次。
经典的隐喻:
想象一下建筑物下的电梯每天一次运输一次,类比是功能的执行和响应。
电梯首次进入后,等待15秒。如果有人在此过程中进来,请等待时间15秒,然后开始运输直到15秒。这是默认策略。
实现效果:当鼠标移动在框上时,该数字将在框的中央打印。
未实现电阻时的相应页面效应如下:
实施后相应的页面效应如下:
接下来记录我的思考过程,以实现完美的过程。
问题讨论:发现印刷的是窗口,并且正在打印的PR是不确定的。实际上是Div#容器和Mouseevent。其原因是:debonce函数在鼠标运动中调用debonce函数时在容器中,在实体人参移动中打印了此和e传递给参数func。在计时器中指向窗口对象以非刻痕模式指向窗口对象,并且窗口对象中的e自然不确定。解决方案是保存此问题并在fturn的函数中保存和参数,然后将其更改为同时呈现的参数通过申请进行功能。
问题讨论:我发现第一次无法第一次执行,并且第一次需要执行直到第二次延迟。
问:为什么要使用callnow =!超时判断?而不是使用callnow = true,然后将callnow设置为计时器中的false?
首先,为什么您不能用布尔值进行判断。由于计时器是一项异步任务,在延迟时间期间,callnow始终是正确的,这会导致func在延迟时间内触发。直到时间到达延迟之前,呼叫变为假停止执行函数。
回到一个问题,为什么您可以使用callnow =!判断的超时。当第一次触发Mousemove事件时,“ Let Timeout”执行,此时超时是未定义的;Callnow逆转为真实;此时,超时是未定义的,并且将计时器分配给超时。请注意。在时间时保存的值为1(第一个计时器的ID),但是计时器是异步任务,并且内部尚未执行“超时= null”。然后判断callnow是真实的,并执行func函数以实现立即执行的execution.effect.effect.sove。在延迟第二次延迟中第二次移动鼠标。目前,超时保存的值为1,而呼叫则逆转为false;清除先前的ID计时器;超时保存值2(带ID的计时器为2),并法官callnowfor false,请勿执行func;否则,如果您等到延迟,则第二次移动鼠标。目前,已执行异步任务。超时变为无效。callnow被逆转为true,并将执行func.注意:关闭此处,可以访问超时。
问题讨论:可以通过传递参数来判断,以确定实际业务需求应立即立即执行。
问题讨论:继续改善。如果需要获得FUNC功能的返回值,该怎么办?然后,您需要将func的执行结果保存到结果变量返回中。还有另一个问题。Settimeout是一项异步任务。返回时,它获得了不确定的。只有在获得直接化的情况下才能获得)。
问题讨论:当延迟设定的时间太长(例如30秒甚至更长的时间)时,我只能在延迟时间过去后再次触发。如果取消反筛选是绑定到按钮的,则可以在单击后立即执行代码。需要考虑的问题是可以将此函数放入Debonce的取消方法中,因为该功能也是一个对象。特定的实现想法应该是通过删除的变量保存原始返回函数,然后定义debonced.cancel,该cancel被分配给函数。
以上内容是我的学习过程中的思考。