我对这个条件值的理解是什么 |赋值正确吗?

Is my understanding of this conditional value | value assignment correct?

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

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

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

根据我的假设,这会检查 window 对象是否包含一个名为 WORLD_CLOCK 的键,如果它包含 (true) 它 returns 那个函数,如果不是 (false),它会将 WORLD_CLOCK 分配给 window 和 returns 该分配的 WORLD_CLOCK 函数。

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

这个假设是否正确?

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

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

谢谢。

我认为你同事的代码假设总是有一个 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()

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

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