JS赋值传递的问题

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

    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不变

 

posted @ 2016-10-28 19:59  月下夜行  阅读(866)  评论(0编辑  收藏  举报