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 = [];
// ...
我正在用 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 = [];
// ...