JS 赋值的问题

Author Avatar
LI Liangmin 10月 28, 2016

根据值的类型是基本类型值还是复杂类型的值在传递时会有不同。

JS函数的参数传递是按值传递,基本类型值传递的是副本,复杂类型值传递的是引用。从而会影响原来的值,不会改变原来的复制前的引用。

       function foo (x) {
            x += 1;
            console.log(x);
       }

       var a = 3;
       var b = new Number(a);
       foo(a);    //4        复制了3,从而函数中操作不会影响到a指向的值
       console.log(a);  //3
       foo(b);     //4      b是个数字对象,参数传递时传给x的是这个对象的引用。 x += 1; 由于基本类型值是不可变的,首先会从x指向的值中提取出3,最后x神不知鬼不觉的从一个引用变为
                            一个新的数字对象的用。原对象还在那里。

       console.log(b);  //3

有时,我只是想去传入一个数组参数,但是却改变了数组的值,这时可以传入对象的副本即可。如:

      var arr = [1, 3, 5];
      function foo (a) {
          return a.push("end_flag").join(" ");
      }

      foo(arr);    //这时arr指向的数组也发生了变化。

      foo(arr.slice()); //arr不变