天天看點

JavaScript值傳遞與引用傳遞(址傳遞)

值傳遞與引用傳遞(址傳遞)
  • 值傳遞–作用于基本資料類型的變量
var a = 1;
var b = a;
console.log(a,b);//1 1 
b = 3;
console.log(a,b);//1 3
//首先,聲明a,b即在棧記憶體中存入a,b,然後把1指派給a,相當于給棧記憶體中的a傳值,傳的值是1,然後又把a指派給b,相當于把a的值複制了一份,然後指派給了b。
           
特點:
1.可以直接操作儲存在變量中的實際的值
2.參數傳遞時傳遞的是實際值
           
  • 引用傳遞–作用于引用類型的變量
var obj = {
	name:"zhangsan",
	age:12
}
var obj2 = obj;
console.log(obj,obj2);//{ name: 'zhangsan', age: 12 }
obj2.gender = "male";
console.log(obj,obj2);//{ name: 'zhangsan', age: 12, gender: 'male' }
//首先,在棧記憶體中儲存變量obj,然後在堆記憶體中開辟一塊新的空間用來儲存對象的屬性和方法,然後會傳回一個記憶體位址,傳給obj,實際上,obj是通過記憶體位址通路内部的屬性和方法的。
obj2=obj,實際上是将obj中的引用位址複制給了obj2。
           
特點:
1.不能直接操作對象的記憶體空間,實際上是在操作對象的引用。可以添加、删除、修改引用資料類型變量的屬性和方法。
2.參數傳遞時傳遞的是引用位址