javascript - 在将参数传递给函数时重新分配参数是否有任何问题
问题描述
在下面的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)
,这是不正确的。clearTimeout()
应该使用返回的超时 ID 调用setTimeout()
。
似乎它有效,因为您clearTimeout()
从超时到期时执行的函数调用。调用clearTimeout()
不起作用,但超时已经过期,JavaScript 无论如何都会清除它。
clearTimeout()
不需要从超时回调调用,也无济于事。的目的clearTimeout()
是在超时到期之前调用它,以防止使用设置的回调执行setTimeout()
。
您的代码应该是:
timeout = setTimeout(() => {
fn(...args);
timeout = false;
}, delay);
推荐阅读
- javascript - 如何用织物在画布上添加图像
- amazon-web-services - AWS Lambda 权限可能性
- graph - 从 dwg 布局计算路线
- python - Python/pyspark:将 h20 数据帧作为数组传递给 sklearn kneighbors
- mysql - 从交易表生成每日余额
- bigcommerce - BigCommerce 中未返回的所有付款方式 Get Accepted Payment method rest api
- asp.net-mvc - 带有客户城市子域和客户部门子路由的 MVC 路由
- apache-kafka-connect - Kafka Connect 没有模式,只有 JSON
- javascript - 音频播放器 - 未捕获的 TypeError:document.getElementbyId 不是函数
- javascript - 如何有效地从 JS ArrayBuffer 读取结构(浏览器)?