我正在尝试通过引用传递变量,但它不能正常工作(或者我希望它会这样)。
调用boardCopy
后 callMeMaybe
仍为空,我不知道原因。如果我使用boardCopy = board.slice(0)
复制已经在第一个函数中的电路板,并且在第二个函数中没有这样做,那么它正在工作,但这不是一个选项,因为真正的电路板会更大并且{{1}将是一个递归函数,而且复杂得多。
callMeAnytime
答案 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中通过引用传递。如果您向我们提供有关您尝试做的更多详细信息,我们可能会指出您正确的方向。