在将参数传递给函数时重新分配参数是否有任何问题



在下面的throttle函数中,timeout最终会变成一个数字,因为它被分配给了setTimeout。我将它重新定义为false,因为它被清除了,代码正常工作。

我没有注意到表面上的任何东西,但想知道这样做是否有任何问题,或者我可能遗漏了什么?

const throttle = (fn, delay) => {
let timeout;
return (...args) => {
if(!timeout) { 
timeout = setTimeout(() => {
fn(...args);
clearTimeout(timeout = false);
}, delay);
}
}
};

代码:

clearTimeout(timeout = false)

评估为:

timeout = false;
clearTimeout(timeout)

这意味着您调用clearTimeout(false),但这是不正确的。应使用setTimeout()返回的超时ID来调用clearTimeout()

它似乎有效,因为您从超时到期时执行的函数中调用clearTimeout()。对clearTimeout()的调用不起作用,但超时已经过期,JavaScript无论如何都会清除它。

不需要从超时回调调用clearTimeout(),也没有帮助。clearTimeout()的作用是在超时到期之前调用它,以防止执行使用setTimeout()设置的回调。

您的代码应该是:

timeout = setTimeout(() => {
fn(...args);
timeout = false;
}, delay);

相关内容

  • 没有找到相关文章