通过引用传递数组不是't工作
Passing an array by reference isn't working
我试图通过引用传递一个变量,但它没有正常工作(或者我希望它能正常工作)。
调用了callMeMaybe
之后,boardCopy
仍然是空的,我不知道为什么。如果我在第一个函数中用boardCopy = board.slice(0)
复制电路板,而在第二个函数中不这样做,它就可以工作了,但这不是一个选项,因为真正的电路板会大得多,而callMeAnytime
将是一个递归函数,而且要复杂得多。
callMeAnytime(3, [], [1, 0, 1, 1]);
function callMeAnytime(index, moves, board) {
for (var i = index; i >= 0; i--) {
var boardCopy = [];
callMeMaybe(i, board, boardCopy)
console.log(board); // [1, 1, 1, 1]
console.log(boardCopy); // []
}
}
function callMeMaybe(i, board, boardCopy) {
if (board[i] == 1) {
boardCopy = board.slice(0);
boardCopy[i] = 0;
console.log(board); // [1, 1, 1, 1]
console.log(boardCopy); // [1, 1, 1, 0]
}
}
如前所述,javascript使用传递值,您可以修改对象元素/属性,但不能替换对象本身。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);
}
}
您正在为局部变量分配一个新值。当你在callMeAnytime
中进行拼接时,它就起作用了,因为它被分配给了"主/原始变量"(它被传递给callMeMaybe
,所以callMeMaybe
不会重新分配局部变量)
编辑:正如millimouse所说,你一开始就不能在Javascript中通过引用传递。如果你给我们更多关于你想做什么的细节,我们可能会为你指明正确的方向。
相关文章:
- 将函数引用存储在散列中在javascript中无法正常工作
- 当我移动引用three.js的html文件时,three.js停止工作
- 对象引用的隐式传递是如何工作的
- 这些变量引用如何工作
- (谷歌API)单元格引用中的动态工作表和工作表创建脚本的名称
- 对象引用如何在 javascript 内部工作
- JavaScript img onclick 引用错误才能正常工作
- 不确定文档引用器是否正常工作
- Jasmine spyOn:当传递间谍函数引用时如何使其工作
- Zingchart:可以'你不能让它工作吗?引用错误:未定义zingchart
- 通过引用传递数组不是't工作
- 未捕获的引用错误——一个函数工作而另一个不起作用
- 当在html中引用jsx文件时,React渲染方法不工作
- JavaScript webkit语法错误,在Firefox中正常工作;价值vs.引用
- javascript对象引用不工作的getElementById
- Ng-grid不能与文件引用的单元格模板一起工作
- 如何引用文档.在React组件中工作
- Javascript AMCharts通过ID引用图形不工作
- 无法使引用标头工作
- 函数正向引用工作异常