Why = cannot change the array, but push can?
本问题已经有最佳答案,请猛点这里访问。
我想使用
我要它等于
我试过
在这种情况下,我怎样才能让
1 2 3 4 5 6 7 8 9 10 | var array = []; init(array); console.log(array); function init(arr) { arr.push('1'); arr.push('2'); arr = ['a', 'b']; } |
https://jsbin.com/kiveyu/4/edit?控制台
因此,发生这种情况的原因是,您要将局部变量分配给新数组,而在分配之前,局部变量保留了传入数组的值。
参数保存对传入值的引用。但是,参数仍然是局部变量。写入该变量将只修改局部变量,并将丢失保留的引用。
要扩展,从被调用开始:
1 | init(array);//call function init with value array |
接下来,在实例化时创建上下文环境,它保存一个局部变量
1 | function init(array) { |
在此之后,将两个值推送到EDOCX1的值(0),这是传入EDOCX1的值(0)。
1 2 | array.push('1'); array.push('2'); |
这就是发生混乱的地方。局部变量
1 | array = ['a', 'b']; |
这就是为什么看起来您不能通过赋值来更改数组的原因——因为您在该范围内唯一可以访问的是与原始数组相关的局部变量。
1 2 3 4 | function init(array) { array.push('a'); array.push('b'); } |