gpt4 book ai didi

javascript - underscore.js 的 throttle 实现中的 'remaining > wait' 条件语句何时为真?

转载 作者:行者123 更新时间:2023-12-01 15:17:40 26 4
gpt4 key购买 nike

库代码(有问题的第 860 行):
https://github.com/jashkenas/underscore/blob/master/underscore.js
if (remaining <= 0 || remaining > wait)
下半场什么时候是真的?

背景 - 关于 SO 的第一篇文章,对 javascript 编码非常陌生。我已经从头开始重新实现 throttle 作为练习,我正在将我的版本与库函数进行比较。我不明白为什么这部分条件语句存在于库函数中,因为在我看来它永远不会是真的,所以我认为我遗漏了一些东西。有人可以通过提供引用的陈述是真实的情况来填写我吗?

我已经通过调试器运行它并在谷歌上搜索文章但没有找到答案。

完整的库函数:

_.throttle = function(func, wait, options) {
var timeout, context, args, result;
var previous = 0;
if (!options) options = {};

var later = function() {
previous = options.leading === false ? 0 : _.now();
timeout = null;
result = func.apply(context, args);
if (!timeout) context = args = null;
};

var throttled = function() {
var now = _.now();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) { // THIS LINE
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
result = func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};

throttled.cancel = function() {
clearTimeout(timeout);
previous = 0;
timeout = context = args = null;
};

return throttled;
};

我无法想象“剩余”比“等待”更重要。这什么时候会发生?

最佳答案

此条件处理在 throttle 期间更改系统时间的情况。正在飞。

这看起来像是一个 super 边缘案例,但实际上时间可能会改变有很多原因。您可以手动更改系统时间,也可以自动更改系统时间(例如,由于与 ntp server 同步),您可以旅行并更改您的时区,当然,不要忘记 DST .

我做了一个playground在那里你可以更深入地调查它。

此提交中引入了此条件:Allow _.throttle to function correctly after the system time is updated .

附言我几乎在每个项目中都遇到了与时间相关的问题,我非常感谢所有考虑这些问题的人。

关于javascript - underscore.js 的 throttle 实现中的 'remaining > wait' 条件语句何时为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com