var test = function ()
{
var my_array =[1,2,3];
my_function = function (my_array)
{
my_array = global_fun().slice();
console.log(my_array.length); // >> 10 !!!!!!
}
my_function (my_array);
console.log(my_array.length); // >> 3 !!!!!!
// my_array keeps being 1,2,3
}
var global_fun = function ()
{
var array =[];
array=[9,8,7,6,5,4,3,2,1,0];
return array;
}
请复制此代码并运行test(); 你可以看到my_array如何保持不变。
为什么这不起作用? 我不想推送值,我想要一个完整的数组更改。
我觉得自己像个人......
答案 0 :(得分:1)
你因为在不同的范围内使用相同的变量名而弄得一团糟。看看几个问题:
my_array = global_fun().slice();
这只会更新my_array
my_function
my_function
没有退货,所以它永远失去了在此处查看修改后的版本,我已更改my_function
,因此它返回已修改的数组,并将返回的值分配给my_array
函数范围中的test
:< / p>
var test = function() {
var my_array = [1, 2, 3]; // 1st one created/declared
my_function = function(my_array) { // 2nd one created as a parameter
my_array = global_fun().slice(); // 2nd one modified, NOT the 1st one
console.log(my_array.length); // >> 10 !!!!!!
return my_array; // returning 2nd one
}
my_array = my_function(my_array); // 1st one gets the value of the 2nd one
console.log(my_array.length); // >> no longer 3 !!!!!!
document.body.innerHTML = 'End array: ' + my_array;
}
var global_fun = function() {
var array = [];
array = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
return array;
}
test();
&#13;
答案 1 :(得分:-1)
我们的想法是,您希望通过引用传递值,而它是基于值的
检查这个问题 Does Javascript pass by reference?
更新后必须按如下方式返回更新后的值:
my_function = function (my_array)
{
my_array = global_fun().slice();
console.log(my_array.length); // >> 10 !!!!!!
return my_array;
}
然后按如下方式调用:
var updatedArray = my_function (my_array);
console.log(updatedArray .length);