为什么=不能改变数组,但推可以?

这个问题在这里已经有了答案:

  • Javascript的参考与价值[复制] 4个答案

  • 所以发生这种情况的原因是因为您将局部变量赋值给新数组,而在赋值之前,局部变量保存了传入数组的值。

    该参数保存对传入的值的引用。但是,该参数仍然是局部变量。 写入该变量只会修改局部变量,并且会丢失保持的引用。

    从被称为扩展:

    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

    上一篇: Why = cannot change the array, but push can?

    下一篇: Variable References Changing