首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Filatov使用OR语句?

为什么Filatov使用OR语句?
EN

Stack Overflow用户
提问于 2020-10-27 02:31:56
回答 2查看 40关注 0票数 0

我已经将Dmitry Filatov的jQuery-Plugins (https://github.com/dfilatov/jquery-plugins)分支,以便了解这位@#^#$%高手是如何编写油门和去抖动包装器的。

在所有对我来说完全没有意义的事情中,他的油门将setTimeout()包装在生命中,作为OR语句的一部分:

代码语言:javascript
复制
// why the extra complexity here?
timer || (function() {
   if (needInvoke) {
     fn.apply(ctx, args);
     needInvoke = false;
     timer = setTimeout(arguments.callee, timeout);
   } else {
     timer = null;
   }
})();

据我所知,如果计时器有一个值,它只会阻止Life值的执行。这是性能问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-27 02:43:52

由于短路,逻辑运算符可以用作if的替代品。

代码语言:javascript
复制
expr1 || expr2

等同于

代码语言:javascript
复制
if (!expr1) expr2

但是由于||的参数必须是表达式,所以不能将语句块放在那里。IIFE可用于在表达式中包装一组语句。

如果你撤销这些转换,你会得到更直接的代码:

代码语言:javascript
复制
if (!timer) {
  if (needInvoke) {
    fn.apply(ctx, args);
    needInvoke = false;
    timer = setTimeout(arguments.callee, timeout);
  } else {
    timer = null;
  }
}
票数 1
EN

Stack Overflow用户

发布于 2020-10-27 06:25:41

对于其他需要此功能的人,我找到了一个教程,它可以使被弃用的被调用者变得毫无意义:https://programmingwithmosh.com/javascript/javascript-throttle-and-debounce-patterns/

我仍然认为Filatov是一个!#$%@$向导。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64542995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档