Чтобы throttle(func, limit)
работал - может существовать только один экземпляр его продукта.
Проблема в том, что функция onClick
в вашем примере создает новый экземпляр каждый раз, когда ее вызывают.
Это делает бессмысленной переменную inThrottle
бессмысленной, так как создается новая копиядля каждого клика.
Решение состоит в том, чтобы вызывать один экземпляр непосредственно как продукт throttle(foo, 50000)
.
Также должен быть передан сам foo
(не его продукт).
См. Практический пример ниже, а также закрытия и scope для получения дополнительной информации.
// Foo.
const foo = (...args) => {
$("#respond").append("|");
}
// Throttle.
const throttle = (func, limit) => {
let inThrottle
return (...args) => {
if (!inThrottle) {
func(...args)
inThrottle = setTimeout(() => inThrottle = false, limit)
}
}
}
// On Click.
const onClick = throttle(foo, 1000)
// Button - Click.
$('#button').click(onClick);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" id="button" value="Click Me" />
<div id="respond"></div>