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