在JavaScript中更新和访问父变量
Updating and accessing parent variables in JavaScript
我正在用JavaScript创建井字游戏,我试图在一个名为currentPlayer
的变量中跟踪哪个玩家的回合。这个变量在脚本的顶部声明,并为玩家1赋值1。然后在renderBoard函数中访问和更新它。
在玩家1移动之后,我调用renderBoard函数,它呈现最新的移动,然后将currentPlayer变量设置为2,以表明现在轮到玩家2了。函数完成后,我输出一些HTML,其中使用currentPlayer
显示轮到玩家2了。但是,在我的代码中,currentPlayer
未被识别为设置为2。
代码如下:
var currentPlayer = 1;
// Other code
function renderBoard(newMove, currentPlayer)
{
if(!gameOver){
if(currentPlayer === 1)
{
$(newMove).append('<img src="assets/x.png" />');
currentPlayer = 2;
} else
{
$(newMove).append('<img src="assets/o.png" />');
currentPlayer = 1;
}
} else
{
$('img').remove();
}
}
$('#gameboard-wrapper').on(
'click',
'div[data-location]',
function()
{
renderBoard(this, currentPlayer);
$('p').html("Player " + currentPlayer + "'s turn"); // After player 1's move, this should output 2, but it repeatedly outputs 1.*/
$(this).off();
}
);
据我所知,currentPlayer是一个全局变量,应该为整个脚本更新,即使它在函数内部更新。我错过了什么?
为将来看到这个问题的人找到了答案。
我的错误是为renderBoard函数制作currentPlayer参数。当我引用currentPlayer时,我引用的是调用函数时传递的currentPlayer参数,而不是currentPlayer全局变量。
更正代码:
var currentPlayer = 1;
// Other code
function renderBoard(newMove) // Removed currentPlayer parameter
{
if(!gameOver){
if(currentPlayer === 1)
{
$(newMove).append('<img src="assets/x.png" />');
currentPlayer = 2;
} else
{
$(newMove).append('<img src="assets/o.png" />');
currentPlayer = 1;
}
} else
{
$('img').remove();
}
}
$('#gameboard-wrapper').on(
'click',
'div[data-location]',
function()
{
renderBoard(this); // Don't pass in currentPlayer argument
$('p').html("Player " + currentPlayer + "'s turn");
$(this).off();
}
);
调用(this).off。它去掉了点击界面。在那之后,当你点击游戏时什么都不会发生。删除this.off。
相关文章:
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 查询后websql成功回调无法访问变量
- 无法访问变量
- 从ajax调用成功内部访问变量
- 从子弹出子窗口访问变量
- 下划线模板无法访问变量
- Meteor Iron路由器通过[data]vs[params]访问变量
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 如何从嵌套函数中访问变量
- 在<%%中定义的访问变量>从<脚本></脚本>
- 自提交表单访问变量javascript
- 如何访问变量
- 稍后在链中访问变量
- 在 Javascript 中访问变量
- 在方法调用对象之外访问变量而不使它们全局化(可能吗?
- 如何从函数/实例外部访问变量
- 从另一个脚本源访问变量
- Meteor:跨所有 Meteor.method的访问变量
- 每次加载页面时,火狐附加组件访问变量
- 在另一个函数中访问变量,返回未定义的 - JavaScript