按值傳遞和按引用傳遞

ECMAScipt中全部函數的參數都是按值傳遞的。也就是說,把函數外部的值複製給函數內部的參數,就和把值從一個變量複製到另外一個變量同樣。javascript

在向參數傳遞基本類型的值時,被傳遞的值會被複制給一個局部變量(形參,arguments對象中的一個元素)。而傳遞引用類型的值,會把這個值在內存的地址複製給一個局部變量,所以當局部變量的變化會反映在函數的外部。java

Javascript代碼 :

  function addTen(num){  函數

     num+=10;  spa

   return num;  設計

  }  對象

      var count=10;  ip

  var result=addTen(count);  內存

  aelrt(count);  //20,沒有變化ci

  aelrt(result);  //30string

 

Javascript代碼:

  function setName(obj){  

     obj.name="Nicholas";  

  }  

  var person=new Object();  

  setName(person);  

  alert(person.name);   //Nicholas

 以上代碼中建立一個對象,並將其保存在變量person中,而後這個對象被傳遞到setName()函數中被複制給了obj。

 在這個函數內部,obj和person引用的是同一個對象。

若是是person是按引用傳遞的,那麼person就會自動修改成指向其name屬性爲"Gred"的新對象。可是,當接下來再訪問person.name時,顯示的值仍然是"Nicholas"。

Javascript代碼:

  function setName(obj){  

     obj.name="Nicholas";  

            obj=new Object();  

            obj.name="Greg";  

  }  

  var person=new Object();  

  setName(person);  

  alert(person.name);   //Greg(摘自javascript高級程序設計)

若是這是按值傳遞,那麼下面代碼又爲何說是按引用傳遞?求高手解答

var obj1=new Object();  

var obj2=obj1;

obj1.name="Nicholas";

alert(obj2.name);  //Nicholas

obj1=new Object();

obj1.name="Greg";

alert(obj2.name);  //Nicholas

相關文章
相關標籤/搜索