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

Why I can't save a returned array inside another existing array

本文关键字:数组 另一个 存在 保存 为什么 不能 返回      更新时间:2023-09-26
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是如何保持不变的。

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

我感觉自己像个圣...

你弄得一团糟,因为你在不同的作用域中使用相同的变量名。看看几个问题:

  • my_array = global_fun().slice();这只会更新my_function内部的my_array
  • my_function不归还它,所以它永远丢失了

在此处查看修改后的版本,我已经更改了my_function因此它返回修改后的数组,并将返回的值分配给test函数范围内的my_array

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();

这个想法是,您希望值通过引用传递,而它是基于值的

检查这个SO问题Javascript是否通过引用传递?

您必须在更新

后返回更新的值,如下所示:

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);