模块内的变量不断返回未定义
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
};
我想每回合修改变量 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
};