Javascript 去Bouncing:如果内部变量总是真实的,它是如何工作的
我试图理解去盎司函数是如何工作的。当我试图理解时,我在其中添加了一些日志语句,Javascript 去Bouncing:如果内部变量总是真实的,它是如何工作的,javascript,Javascript,我试图理解去盎司函数是如何工作的。当我试图理解时,我在其中添加了一些日志语句,timeoutId似乎总是有一个值。如果我设置一个setTimeout并将其分配给一个变量,那么即使我清除了超时,该变量似乎总是真实的: let foo = setTimeout(() => { console.log(""); },5000); clearTimeout(foo); foo // some Number value !!foo // true 所以对于这个去盎
timeoutId
似乎总是有一个值。如果我设置一个setTimeout并将其分配给一个变量,那么即使我清除了超时,该变量似乎总是真实的:
let foo = setTimeout(() => {
console.log("");
},5000);
clearTimeout(foo);
foo // some Number value
!!foo // true
所以对于这个去盎司函数,它让我很困惑,它到底在做什么
function debounce(fn, delay) {
let timeoutId;
return function(...args) {
console.log("timeout id is " , timeoutId);
if (timeoutId) {
clearTimeout(timeoutId)
}
timeoutId = setTimeout(() => {
fn(...args)
}, delay)
}
}
timeoutId在调用函数的第一次时不会有值,但这是由
逻辑是:
- 停止以前的任何尝试
- 现在在延迟秒内完成此操作
但是,如果您单击一次(它将启动计时器),然后快速再次单击:它将取消计时器,以便在第一次单击后延迟几秒钟,事情不会发生(但它也会启动一个新计时器,以便在第二次单击后延迟几秒钟,将发生事件,除非有第三次单击…等等。).您可以在完成一次调用后启动多个调用,并处理单击示例,将其他调用提交给fn,并将此fn作为参数传递。如果需要,此调用将返回其他函数。您不确切了解哪一部分?我假设rest运算符和fn调用?@EugenSunic不,我得到了这一部分…我不知道如何
timeoutId
,则会达到de>clearTimeouttruthy@MauirceA-if(truthy)
运行if
中的任何内容,因此clearTimeout
将始终运行(第一次没有超时时除外)。清除超时不会清除变量。添加timeoutId=null
清除超时(timeoutId)下面的行也将变量设置为null
。谢谢昆汀…我想我的误解是当setTimeout被触发时。我认为首先
点击会设置超时,然后所有后续的都必须被忽略,直到setTimeout被执行。我不明白如果setTimeout没有完成,任何子事件都会发生ent单击将“重置”它。@Quentin你能帮我吗?通过这篇文章,我的帐户已被限制。并显示此会议“你已达到问题限制”“对不起,我们不再接受来自此帐户的问题。有关详细信息,请参阅帮助中心。”