首页 > 解决方案 > 在将参数传递给函数时重新分配参数是否有任何问题

问题描述

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

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

const throttle = (fn, delay) => {
  let timeout;

  return (...args) => {

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

  }
};

标签: javascript

解决方案


编码:

clearTimeout(timeout = false)

被评估为:

timeout = false;
clearTimeout(timeout)

这意味着你打电话clearTimeout(false),这是不正确的。clearTimeout()应该使用返回的超时 ID 调用setTimeout()

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

clearTimeout()不需要从超时回调调用,也无济于事。的目的clearTimeout()是在超时到期之前调用它,以防止使用设置的回调执行setTimeout()

您的代码应该是:

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

推荐阅读