在javascript中遇到变量引用问题

时间:2013-06-09 00:41:32

标签: javascript variables pass-by-reference

我正在尝试从原始点获取网格上的4个点。这些包括左,右,底部和顶部一个单元。

如果我从[4, 5]开始,我的输出应为[3, 5] [5, 5] [4, 4] [4, 6]

我可能会查找如何做到这一点,但我一直在玩我自己的方法,我认为我的逻辑是合理的,但我在JavaScript本身有一个简单的问题,当我宣布{{1从那以后,对var tempArr = cords;的任何更改似乎都会影响tempArr。我之前从未遇到过这个问题,这是代码。

cords

问题:有人可以发现为什么当我对var output = [], cords = [4, 5]; var convertToCords = function(i){ var tempArr = cords; var offset = ( ( i%2 ) * 2 ) - 1, // -1, 1, -1, 1 index = Math.floor(i/2); // 0, 0, 1, 1 tempArr[index] = cords[index] + offset; return tempArr; } for (var i = 0; i < 4; ++i){ console.log(cords); newCords = convertToCords(i); var x = newCords[0], y = newCords[1]; array[i] = "[" + x + ", " + y + "]"; } console.log(output); tempArr[index] = cords[index] + offset; 执行某些操作时,tempArr也会受到影响吗?我应该以另一种方式声明cords吗?

请参阅jsFiddle

1 个答案:

答案 0 :(得分:2)

var tempArr = cords;是你的问题。 cordstempArr引用相同的数组对象,即使变量名称不同。您需要复制原始数组:

var tempArr = cords.slice(0);