【问题标题】:Is my understanding of this conditional value | value assignment correct?是我对这个条件值的理解吗?赋值正确吗?
【发布时间】:2020-02-09 05:46:07
【问题描述】:

我同事的脚本充满了这样的代码:

(window.WORLD_CLOCK || (window.WORLD_CLOCK = WORLD_CLOCK))();

现在,在这一行之前定义了一个名为 WORLD_CLOCK 的函数。

根据我的假设,这将检查 window 对象是否包含名为 WORLD_CLOCK 的键,如果包含 (true),则返回该函数,如果不包含 (false),则分配WORLD_CLOCK 到窗口并从该分配返回 WORLD_CLOCK 函数。

外括号捕获这个函数,第三对(空)括号调用这个函数。

这个假设正确吗?

如果是这样,用以下代码替换该行是否合适:

if (typeof WORLD_CLOCK === "function") {
  if (!window.hasOwnProperty("WORLD_CLOCK")) {
    window.WORLD_CLOCK = WORLD_CLOCK;
  }
  window.WORLD_CLOCK();
}

谢谢。

【问题讨论】:

  • 那段代码很常见....
  • @epascarello 你有什么例子可以看一下吗?
  • 通常人们将其写为window.WORLD_CLOCK = window.WORLD_CLOCK || WORLD_CLOCK,这完全取决于您选择的样式指南允许的内容。如果你不喜欢它,那就把它放在样式指南中不要这样做。

标签: javascript function conditional-statements variable-assignment


【解决方案1】:

我认为你同事的代码假设总是有一个 WORLD_CLOCK 函数,步骤是:

  1. 如果window 没有WORLD_CLOCK 属性,则将WORLD_CLOCK 函数分配给具有相同名称的属性
  2. window 对象调用属性WORLD_CLOCK

所以,也许重写可能是这样的:

if (!window.hasOwnProperty("WORLD_CLOCK") {
  window.WORLD_CLOCK = WORLD_CLOCK
}

window.WORLD_CLOCK()

【讨论】:

  • 感谢您的快速回答,非常感谢。
【解决方案2】:

我认为它可能更像(不是你会以这种方式完成它只是更直接的翻译)。

if (window.WORLD_CLOCK) {
  window.WORLD_CLOCK();
} else {
  window.WORLD_CLOCK = WORLD_CLOCK;
  window.WORLD_CLOCK();
}

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2013-02-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多