JS 全局变量不会在函数范围之外改变

JS global variable not changing outside of function scope

我正在用 JS 制作井字游戏,我正在尝试在“游戏控制器”模块中实现一个函数来处理玩家的回合.我 运行 遇到的问题是全局 属性 'currentPlayer' 没有在修改函数的范围之外改变它的值它。

我试过使用 Dev 工具进行调试,我可以看到值发生变化,但仅限于 'switchPlayerTurn' 函数内部。有什么建议吗?

const GameController = (() => {
    const activePlayers = [];
    let currentPlayer = ''; 
    
   const _switchPlayerTurn = () => {
        if(currentPlayer === '') {
            currentPlayer = activePlayers[0];
        } else if(currentPlayer === activePlayers[0]){
            currentPlayer = activePlayers[1];
        } else if(currentPlayer === activePlayers[1]){
            currentPlayer = activePlayers[0];
        }
    }

    const init = () => {
        return createPlayers()
        .then(_switchPlayerTurn());
    }

    return {
        init,
        activePlayers,
        currentPlayer,
    }

})();

返回一个带有 currentPlayer 的对象只会导致对象在 return 的时刻包含 currentPlayer 的值。您需要一个函数,以便您可以按需检索内部标识符的当前值。

return {
    init,
    activePlayers,
    getCurrentPlayer: () => currentPlayer,
}

然后,无论您在外部使用它的什么地方,都使用 .getCurrentPlayer() 而不是 .currentPlayer

这不像@certainPerformance 的回答那么优雅,但为了完整起见...您始终可以在函数范围之外定义它,以便始终可以在全局范围内访问它

let currentPlayer = ''; 
const GameController = (() => {
    const activePlayers = []; 
    // ...