對於javascript函數傳遞參數的問題,究竟是值傳遞仍是引用傳遞!

栗子1:javascript

function setName(obj){ 
    obj.name="Nicholas"; 
}
var person = new Object(); 
setName(person);  

  

理解:person 和 obj指向都是同一個對象,也就是堆內存中地址,當修改其屬性name的值時,java

同時外部的person也同時反映出來。spa

栗子2:code

function setName(obj){   obj.name="Nicholas";   obj = new Object();   obj.name="jack"; } var person =new Object(); setName(person); console.log(person.name);//Nickolas

 

理解:obj =new Object();對象從新指向一個新的對象,因此這樣時候,不在是原來的person的對象,對象

         因此在修改了其name時,對於原person對象不起做用。blog

結論:ip

在javascript中參數傳遞沒有引用傳遞,只有值傳遞。內存

基本類型中:只是複製值,當變量1把值賦值給另外一個變量2時,把變量1值複製一份給變量2,io

而這兩個變量不是同一個變量,而是不一樣變量。只是同樣的值而已。console

引用類型中:無非就是兩種狀況

① 參數被修改指向新的對象,此狀況下固然參數已指向新的對象,再修改其屬性方法與參數傳入的對象無關,也就是原對象的變量不受影響。
② 修改傳入的對象的某個屬性或方法,此狀況下,就是就是在修改原引用類型的變量的屬性和方法。

相關文章
相關標籤/搜索