值传递
基本数据类型的情况下,a b为值传递,更改b的值并不会影响a的值
var a = 1;
var b = a;
b += 1;
console.log(b); //2
console.log(a); //1
引用传递
当a指向的是一个函数或者对象的时候,b=a是一个引用传递,赋值以后a b指向同一个对象
//数组
var a = [1,2,3];
var b = a;
b.push(4);
console.log(b); //1,2,3,4
console.log(a); //1,2,3,4
//函数
var a = function(){console.log("function a");};
var b = a;
b.prototype.sayHello = function() {
console.log("hello");
};
a.prototype.sayHello(); //hello
//对象字面量
var a = {};
var b = a;
b.name = "tangpin";
console.log(a.name); //tangpin
改变变量指向的引用
var a = [1,2,3];
var b = a;
b = [1,2,3,4]; //b指向了另一个引用
console.log(a); //1,2,3
console.log(b); //1,2,3,4
对象拷贝
当我们想拷贝一个对象的时候,下面这种做法是粗错
var a = {name:"andy",age:21};
var b = a;
b.name = "littleandy";
console.log(a.name);
可以看到,我们的本意是将a对象的一份拷贝赋值给b,但是这样做使得对b的修改影响到a