在JavaScript中更新和访问父变量

Updating and accessing parent variables in JavaScript

本文关键字:访问 变量 更新 JavaScript      更新时间:2023-09-26

我正在用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。