为什么我不能将返回的数组保存在另一个现有数组中
Why I can't save a returned array inside another existing array
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);
相关文章:
- JavaScript数组包含一个值
- 使用事件更改数组的一个元素
- 从 javascript 数组创建一个 Jquery 数组
- 使用javascript匹配字符串中数组的一个元素
- Angular2从数组创建一个列表
- 在Javascript数组或一个对象中存储多个数据所需的Tweak
- 你能给被劫持的JavaScript数组添加一个函数吗
- 从带有循环的数组中一个接一个地在画布上绘制形状
- 将图像数组从一个窗口传递到另一个窗口,并在javascript的新窗口中显示图像
- 使用拆分字符串的数组创建一个对象
- 多维数组 - 创建一个表
- 将数组从一个函数传递到另一个函数
- 如何将复选框值的数组从一个JSP页面传递到另一个页面
- 使用Knockout.Js将数组绑定到表,并将数组的一个项绑定到另一个元素
- 需要访问数组从一个js到另一个
- 我如何发送数据像数组从一个html文件到另一个html页面
- 从另一个对象和要保存的键数组生成一个对象的最简洁的方法
- 用另一个js数组填充一个javascript数组
- 将对象数组从一个函数传递到另一个函数
- 根据另一个值数组过滤一个对象数组,返回一个空列表