2012-07-18 52 views
0

我有一个脚本设置这样的(http://jsfiddle.net/YD66s/):消耗的Javascript变量时,变量a =变量b

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到最后,因为我使参数[1] =参数[0]。如何在JavaScript中,我可以只引用一个变量,但不会消耗它,最终参数[1]变成参数[0]。

希望这是有道理的。这促使我疯狂地将不同的JavaScript变量与PHP等其他语言进行比较。

+0

究竟是什么不起作用? – Bergi 2012-07-18 21:16:32

+0

你已经清楚地知道如何在不接受它们的情况下“消费”答案。 – 2012-07-18 21:17:00

+0

我遇到的问题是,我的数组参数[0]变成了参数[1],因此它们充当一个单元,我宁愿使用参数[0]作为副本,以便稍后使用它。 – csteel 2012-07-18 21:24:16

回答

1

Javascript数组只是指针,所以当你做参数[1] = arguments [0]时,你实际上只是设置指针,但底层数组是相同的。因此,每次修改参数[1]时,还要修改参数[0]。要做你想做的事,你需要复制数组。你可以这样做:

if (arguments[1].length == 0) { 
    for(var i = 0; i < arguments[0].length; i++) { 
    arguments[1][i] = arguments[0][i]; 
    } 
} 
+0

这有助于!我不知道array = array只是一个指针。这是很好的知道。这是其他变量还是数组? – csteel 2012-07-18 21:31:01

0

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