【发布时间】:2021-03-15 07:54:15
【问题描述】:
您好,我正在尝试学习节流的概念,我已经阅读了一些文章,并且“有点”掌握了它(至少是这个概念)但是在阅读这些文章时我无法弄清楚一件事函数,并且是您返回带有“参数”的函数的部分,例如在我发现的这些函数中:
const throttleFunction = (func, delay) => {
let prev = 0;
return (...args) => {
let now = new Date().getTime();
if (now - prev > delay) {
prev = now;
return func(...args);
}
}
}
const throttle = (func, limit) => {
let inThrottle
return function() {
const args = arguments
const context = this
if (!inThrottle) {
func.apply(context, args)
inThrottle = true
setTimeout(() => inThrottle = false, limit)
}
}
}
我不明白是什么
return (...args) => {
return func(...args);
}
确实 另一个也一样
const args = arguments
func.apply(context, args)
事实上,我在尝试使用它们时遇到了一些麻烦,有时我让它们工作,但有时我不这样做,尤其是当我必须将参数传递给我想要限制的函数时
当我只有一个按钮时,我通常会这样做
<button onclick="throttleFunction(some_function,1500)">Click me</button>
它可以工作
但是当我必须通过“this”之类的东西时,我无法得到它 假设我有一些 div 我愿意
const func = (thhis) => {
console.log(thhis);
}
const x = throttleFunction(func,2500);
<div class="abc" onclick="x(this)"> something </div>
<div class="abc" onclick="x(this)"> something </div>
<div class="abc" onclick="x(this)"> something </div>
而且它不起作用,每次我点击 div 时都会调用该函数...
谁能解释一下?
【问题讨论】:
-
我做了这个 js 小提琴:jsfiddle.net/9hoant7d 来测试你的声明
and it doesn't work the function gets called every time i click on the div...,这对我来说似乎不是真的 jsfiddle。它似乎可以很好地限制它。 -
window.x有什么作用? -
确保
x功能在您放入htmlonclick=""区域时可用 -
好的...我发现了为什么这不起作用,因为我使用的是箭头函数,当我通过“this”时它不起作用,我改写为
function(..args)(...args) =>{}anywai 我还是不明白return (...args) => { return func(...args); }这句话是什么意思 -
关于你最后的评论......你正在处理Spread syntax。这就是在此代码示例中接收和传递参数的方式。当然
throttleFunction的实现并没有考虑this上下文,这意味着可以安全地将普通函数而不是上下文敏感方法转换为它们自身的节流变体。
标签: javascript functional-programming arguments throttling args