通过引用传递数组不起作用

时间:2013-06-23 00:22:36

标签: javascript arrays reference

我正在尝试通过引用传递变量,但它不能正常工作(或者我希望它会这样)。

调用boardCopy

callMeMaybe仍为空,我不知道原因。如果我使用boardCopy = board.slice(0)复制已经在第一个函数中的电路板,并且在第二个函数中没有这样做,那么它正在工作,但这不是一个选项,因为真正的电路板会更大并且{{1}将是一个递归函数,而且复杂得多。

callMeAnytime

2 个答案:

答案 0 :(得分:2)

如前所述,javascript使用pass-by-value,您可以修改对象元素/属性,但不能替换对象本身。 slice向对象返回一个新数组。你将不得不这样做。

  

slice不会改变原始数组,但会返回一个新的“一级”   深度“复制,包含从中切出的元素的副本   原始阵列。

function callMeMaybe(i, board, boardCopy) {
    if (board[i] == 1) {
        //boardCopy = board.slice(0);
        var length = board.length,
            j = 0;

        boardCopy.length = 0;
        while (j < length) {
            if (Object.prototype.hasOwnProperty.call(board, j)) {
                boardCopy[j] = board[j];
            }

            j += 1;
        }

        boardCopy[i] = 0;
        console.log(board);
        console.log(boardCopy);
    }
}

答案 1 :(得分:1)

您正在为本地变量分配新值。它在callMeAnytime中进行拼接时有效,因为它被分配到&#34;主/原始变量&#34; (传递给callMeMaybe,因此callMeMaybe不会重新分配本地变量)

编辑:正如millimoose所说,你不能在Javascript中通过引用传递。如果您向我们提供有关您尝试做的更多详细信息,我们可能会指出您正确的方向。