1

我有这样的脚本设置(http://jsfiddle.net/YD66s/):

var countFull = new Array(0,1,2,3,4,5,6);
var countActive = new Array(0,1,2,3,4,5,6);

function pickRandom(a) {
  if(arguments[1].length == 0) {
      arguments[1] = arguments[0];
  }

  var m = Math.floor(Math.random()*arguments[1].length);
  chosen = arguments[1].splice(m,1);

  return chosen;
}

setInterval(function() {
  pickRandom(countFull,countActive);
}, 1000);

当我运行它时,我希望仅为该函数设置变量。相反,它最终会影响 countFull,因为我创建了 arguments[1] = arguments[0]。我如何在 javascript 中只引用一个变量而不使用它,最终 arguments[1] 变成 arguments[0]。

希望这是有道理的。这让我发疯了,JavaScript 变量与 PHP 等其他语言相比有何不同。

4

2 回答 2

2

Javascript 数组只是指针,因此当您执行 arguments[1] = arguments[0] 时,您实际上只是设置了指针,但底层数组是相同的。因此,每次修改 arguments[1] 时,您也会修改 arguments[0]。要执行您想要的操作,您需要复制数组。你可以这样做:

if (arguments[1].length == 0) {
  for(var i = 0; i < arguments[0].length; i++) {
    arguments[1][i] = arguments[0][i];
  }
}
于 2012-07-18T21:15:17.997 回答
0

要复制数组,而不是引用它,请使用copy = original.slice(0).

于 2012-07-18T21:10:40.760 回答