为什么=不能改变数组,但推可以?
这个问题在这里已经有了答案:
所以发生这种情况的原因是因为您将局部变量赋值给新数组,而在赋值之前,局部变量保存了传入数组的值。
该参数保存对传入的值的引用。但是,该参数仍然是局部变量。 写入该变量只会修改局部变量,并且会丢失保持的引用。
从被称为扩展:
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'];
这就是为什么它看起来像不能通过赋值来更改数组 - 因为您在该范围内唯一可以访问的是与原始数组相关的局部变量。
function init(array) {
array.push('a');
array.push('b');
}
链接地址: http://www.djcxy.com/p/20985.html