我的 for 循环的 i 和 j 比我的 minimax 算法中的应该高

i and j of my for loops are getting higher then they should in my minimax algorithm

我当前的代码如下所示:

let bestScore = -Infinity
let move;
for(i = 0; i < board.length; i++)
{
    for(j = 0; j < board.length; j++)
    {
        if(whiteFrameNumber.includes(board[i][j])) // spot is available
        {
            const fieldBefore = board[i][j]
            board[i][j] = cross
            const score = minimax(board, 0, false)
            board[i][j] = fieldBefore
            if(score > bestScore)
            {
                bestScore = score
                move = {i, j}
            }
        }
    }
}
board[move.i][move.j] = cross

和我的极小极大算法:

function minimax(board, depth, isMaximizing)
{
    const result = checkWinner(board)
    if(result !== 'noone won')
    {
        let score
        if(result === cross) score = 1
        else if(result === circle) score = -1
        else if(result === 'tie') score = 0
    }

    if(isMaximizing)
    {
        const bestScore = -Infinity
        for(i = 0; i < board.length; i++)
        {
            for(j = 0; j < board.length; j++)
            {
                if(whiteFrameNumber.includes(board[i][j]))  // spot is available
                {
                    const fieldBefore = board[i][j]
                    boardi[i][j] = cross
                    const score = minimax(board, depth + 1, false)
                    boardi[i][j] = fieldBefore
                    bestScore = Math.max(score, bestScore)
                }
            }
        }
        return bestScore
    }
    else
    {
        const bestScore = Infinity
        for(i = 0; i < board.length; i++)
        {
            for(j = 0; j < board.length; j++)
            {
                if(whiteFrameNumber.includes(board[i][j])) // spot is available
                {
                    const fieldBefore = board[i][j]
                    boardi[i][j] = circle
                    const score = minimax(board, depth + 1, true)
                    boardi[i][j] = fieldBefore
                    bestScore = Math.min(score, bestScore)
                }
            }
        }
        return bestScore
    }
}

我收到错误:类型错误:无法设置未定义的 属性 '0'

我还得到:类型错误:无法设置未定义的 属性 '3'

通过调试我发现主循环中的'j'在minimax函数之后被设置为3。 我不知道如何以及为什么,但它会解释错误。

我没有通过进一步调试找到任何解决方案,所以我不知道如何继续。

抱歉我的英语不好^^

您在主循环和 minimax() 函数中使用了相同的 ij 变量。所以 minimax() 中的循环正在更新调用者中的变量。

通过使用 letvar.

声明变量,使变量成为每个函数的局部变量
for (let i = ...) {
    for (let j = ...) {
        ...
    }
}