我已经将Dmitry Filatov的jQuery-Plugins (https://github.com/dfilatov/jquery-plugins)分支,以便了解这位@#^#$%高手是如何编写油门和去抖动包装器的。
在所有对我来说完全没有意义的事情中,他的油门将setTimeout()包装在生命中,作为OR语句的一部分:
// why the extra complexity here?
timer || (function() {
if (needInvoke) {
fn.apply(ctx, args);
needInvoke = false;
timer = setTimeout(arguments.callee, timeout);
} else {
timer = null;
}
})();据我所知,如果计时器有一个值,它只会阻止Life值的执行。这是性能问题吗?
发布于 2020-10-27 02:43:52
由于短路,逻辑运算符可以用作if的替代品。
expr1 || expr2等同于
if (!expr1) expr2但是由于||的参数必须是表达式,所以不能将语句块放在那里。IIFE可用于在表达式中包装一组语句。
如果你撤销这些转换,你会得到更直接的代码:
if (!timer) {
if (needInvoke) {
fn.apply(ctx, args);
needInvoke = false;
timer = setTimeout(arguments.callee, timeout);
} else {
timer = null;
}
}发布于 2020-10-27 06:25:41
对于其他需要此功能的人,我找到了一个教程,它可以使被弃用的被调用者变得毫无意义:https://programmingwithmosh.com/javascript/javascript-throttle-and-debounce-patterns/
我仍然认为Filatov是一个!#$%@$向导。
https://stackoverflow.com/questions/64542995
复制相似问题