我想使用=
在函数中启动数组。但是,=
无法更改数组,但push
可以。
我希望它等于["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'];
}
答案 0 :(得分:3)
所以发生这种情况的原因是因为你正在为新数组分配局部变量,而在赋值之前,局部变量保持传入数组的值。
该参数保存对传入的值的引用。但是,该参数仍然是局部变量。写入该变量只会修改局部变量,并且会丢失所持有的引用。
扩展,从被称为:
init(array);//call function init with value array
接下来,在实例化时创建上下文环境,它保存一个局部变量array
,并且该变量的值与传入的array
的值相同(在您的示例中,它们具有同名)
function init(array) {
在此之后,两个值将被推送到array
的值,这是传入array
的值。
array.push('1');
array.push('2');
这里似乎发生了混乱。局部变量array
(仍保留传入的array
的值)将其值更改为新数组。结果是局部变量array
不再保留传入array
的值,但现在保持['a','b']
的值。
array = ['a', 'b'];
这就是为什么看起来你不能通过赋值更改数组 - 因为你在该范围内唯一可以访问的是关于原始数组的局部变量。
答案 1 :(得分:-2)
function init(array) {
array.push('a');
array.push('b');
}