Javascript 为什么=无法更改阵列,但可以推送?
我想使用Javascript 为什么=无法更改阵列,但可以推送?,javascript,Javascript,我想使用=启动函数中的数组。但是,=无法更改数组,但是推送可以更改数组 我希望它等于[“a”,“b”]。但现在的结果是[“1”,“2”] 我试过arr=['a','b']和arr=['a','b'].slice()。但两者都不起作用 在这种情况下,如何让=工作 var array = []; init(array); console.log(array); function init(arr) { arr.push('1'); arr.push('2'); arr = ['a',
=
启动函数中的数组。但是,=
无法更改数组,但是推送可以更改数组
我希望它等于[“a”,“b”]
。但现在的结果是[“1”,“2”]
我试过arr=['a','b']代码>和arr=['a','b'].slice()代码>。但两者都不起作用
在这种情况下,如何让=
工作
var array = [];
init(array);
console.log(array);
function init(arr) {
arr.push('1');
arr.push('2');
arr = ['a', 'b'];
}
发生这种情况的原因是,您正在为局部变量分配新数组,而在分配之前,局部变量保存传入数组的值
该参数包含对传入值的引用。但是,该参数仍然是一个局部变量。写入该变量只会修改局部变量,并将丢失保留的引用
要展开,请从被调用开始:
init(array);//call function init with value array
接下来在实例化时创建上下文环境,它保存一个局部变量数组
,该变量的值与传入的数组
的值相同(在您的示例中,它们具有相同的名称)
在此之后,将两个值推送到数组
的值,这是传入的数组
的值
array.push('1');
array.push('2');
这里似乎是混乱发生的地方。局部变量数组
(仍保留传入的数组
)的值已更改为新数组。结果是局部变量array
不再保存传入的array
的值,而是现在保存['a','b']
的值
array = ['a', 'b'];
这就是为什么看起来您无法通过赋值来更改数组的原因,因为您在该范围内唯一可以访问的是与原始数组相关的局部变量。array.length=0;//如果您想在数组之前刷新它。push('a','b');//要推送两个项,travis说的是,您需要将数组分配给init调用array=init(array)
并在init函数中返回修改后的数组<代码>返回数组
这是正确答案。更容易注意到名称是否不同,比如函数定义为function init(arg_array){…}
Perfect dupe target@torazaburo.JavaScript是pass-by-value。局部变量array
引用了与全局变量array
相同的对象。因为对象是可变的,所以可以对值本身进行更改。但是由于现在全局和局部数组
变量之间存在引用,因此分配给局部变量不会影响全局变量。只是为了下一次遇到这样的问题:请对不同的事物使用不同的名称。调用外部变量array
和调用init
函数的参数array
都会造成不必要的混乱。@T.J.Crowder耶!!我只是注意到:P完成了编辑。
array.push('1');
array.push('2');
array = ['a', 'b'];