模块内的变量不断返回未定义

Variable inside Module keeps on returning undefined

我想每回合修改变量 currentPlayer。我也将 PlayerController.switchPlayer() 添加到事件侦听器中。但是每次 currentPlayer 都无法更新并且 returns 未定义。我什至尝试将相同的变量作为未定义的变量移动到全局,尽管代码 运行 贯穿整个 if/else 块,但它仍然无法更新。

const PlayerController = (() => {
  let playerO = Player("O");
  let playerX = Player("X");
  let currentPlayer;
  let switchPlayer = () => {
    if (!playerO.activePlayer) {
      playerO.activePlayer = true;
      playerX.activePlayer = false;
      currentPlayer = playerO;
    } else if (playerO.activePlayer && !playerX.activePlayer) {
      playerX.activePlayer = true;
      playerO.activePlayer = false;
      currentPlayer = playerX;
    }
  };
  return { playerO, playerX, switchPlayer, currentPlayer };
})();

要返回的对象计算一次 - 在 IIFE 结束时。调用 switchPlayer 并重新分配本地 currentPlayer 不会更改返回的对象 currentPlayer 属性,因为该对象已经被评估并返回。

您可以将 currentPlayer 改为 getter,这样它 returns IIFE 中可能重新分配的值:

return {
  playerO,
  playerX,
  switchPlayer,
  get currentPlayer() {
    return currentPlayer;
  }
};

但我不想隐瞒它是一个函数的事实,这样您就可以从外部调用 getCurrentPlayer

return {
  playerO,
  playerX,
  switchPlayer,
  getCurrentPlayer: () => currentPlayer
};