正确的做法是什么......
var array1 = []
var array2 = []
function doIt(arg){
var myArray;
if(arg == 1){
myArray = array1
}else if(arg == 2){
myArray = array2
}
myArray.push('test');
}
doIt(1); //array1 should now be ['test'] but it's empty
答案 0 :(得分:2)
除了四个轻微的句法瑕疵之外,你的代码还可以:http://jsfiddle.net/hk9Md/
var array1 = []; // <-- added semi-colon
var array2 = []; // <-- added semi-colon
function doIt(arg){
var myArray;
if (arg == 1) {
myArray = array1; // <-- added semi-colon
} else if (arg == 2) {
myArray = array2; // <-- added semi-colon
}
myArray.push('test');
}
doIt(1);
alert(array1[0]); // produces 'test'
答案 1 :(得分:0)
为什么不:
var myArray = arg == 1? array1 : array2;
如果有两个以上的选择,您可以尝试:
var source = {
'1': array1,
'2': array2,
'3': array3,
...
}
或零索引:
var source = [ ,array1, array2, array3, ...];
然后:
function doIt(arg) {
var myArray = source[arg];
...
}
甚至:
var doIt = (function() {
var source = {
'1': array1,
'2': array2,
'3': array3,
...
}
return function (arg) {
var myArray = source[arg];
}
}());
填充你的靴子。 : - )
答案 2 :(得分:0)
可以说,做到这一点的“正确”方法不是编写带副作用的函数。您可以编写该函数,以便它返回数组的修改副本:
var array1 = [1, 2, 3],
array2 = [4, 5, 6],
x = getUserInput(),
result = doIt(1, x == 1 ? array1 : array2);
function doIt(arg, original_array){
var copy = [].concat(original_array);
// ...
return copy;
}
有时它是不可避免的,但是当本地函数改变全局状态时,程序变得更难调试。