为什么我不能将返回的数组保存在另一个现有数组中

时间:2014-12-16 17:37:34

标签: javascript arrays

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如何保持不变。

为什么这不起作用? 我不想推送值,我想要一个完整的数组更改。

我觉得自己像个人......

2 个答案:

答案 0 :(得分:1)

你因为在不同的范围内使用相同的变量名而弄得一团糟。看看几个问题:

  • my_array = global_fun().slice();这只会更新my_array
  • 中的my_function
  • my_function没有退货,所以它永远失去了

在此处查看修改后的版本,我已更改my_function,因此它返回已修改的数组,并将返回的值分配给my_array函数范围中的test:< / p>

&#13;
&#13;
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;
&#13;
&#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);