微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Filatov为什么使用OR语句?

如何解决Filatov为什么使用OR语句?

我已经分支了德米特里·菲拉托夫(Dmitry Filatov)的jQuery-Plugins(https://github.com/dfilatov/jquery-plugins),以了解这位@#^#$%的男人向导是如何编写节流阀和防反弹器的。

在对我完全没有意义的所有事情中,他的调节器将setTimeout()封装在IIFE中,作为OR语句的一部分:

// why the extra complexity here?
timer || (function() {
   if (needInvoke) {
     fn.apply(ctx,args);
     needInvoke = false;
     timer = setTimeout(arguments.callee,timeout);
   } else {
     timer = null;
   }
})();

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

解决方法

由于短路,逻辑运算符可以替代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;
  }
}
,

对于需要此功能的其他人,我找到了一个教程,可以使已弃用的被叫者陷入困境:https://programmingwithmosh.com/javascript/javascript-throttle-and-debounce-patterns/

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。