1.在js中基本數據類型是按值傳遞的,引用類型的值是保存在內存中的變量,js不容許直接操做對象的內存空間。函數
2.在複製變量值中咱們能夠看到兩者的不一樣。
當複製一個基本類型時,會建立一個當前對象的副本,它擁有爲它新分配的空間。兩者之間是獨立的,不相互影響。
當複製一個引用類型時,咱們也是建立看這個值的一個副本,不一樣的是這個值是一個指針,指向存儲在堆中的對象。這兩個值指向的是同一個對象,所以它們會相互影響。指針
1.在向參數傳遞基本類型時,被傳遞的值複製給了一個局部變量(argument);在向參數傳遞引用類型的值時,會把這個值在內存中的地址複製給局部變量,所以這個局部變量的變化會反應在函數外部code
function Add(num){ num+=10; return num; } var count=20; var result=Add(count); console.log(count); //20,沒有變 console.log(result); //30
2.js中全部函數參數的傳遞都是按值傳遞的。值的注意的是,並非說在局部做用域中被修改的對象會在全局中反應出來,就說明參數是按引用傳遞的對象
function setName(obj){ obj.name='ywl'; obj=new Object(); obj.name='zhangsan'; } var person=new Object(); setName(person); console.log(person.name); //ywl
輸出的值是ywl,由於在函內部重寫obj,可是原始的引用並無變,變量的引用是一個局部對象,而這個局部對象在函數執行完畢以後會被當即銷燬。ip