js中函數參數值傳遞和引用傳遞


js中函數參數值傳遞和引用傳遞:
在閱讀本章節之前建議參閱一下兩章節:
1.值類型可以參閱javascript的值類型一章節。
2.引用類型可以參閱javascript的引用類型一章節。
一.函數傳遞值類型:
代碼實例如下:

 

復制代碼
function addNum(num)
{ 
 num+=10; 
 return num; 
} 
var num=10; 
var result=addNum(num); 
console.log(num);
console.log(result);
復制代碼

 

以上代碼的彈出值分別為:10和20,下面進行一下分析:
聲明變量num並復制為10,這個是num是一個值類型,當為函數傳遞參數的時候,是將此值復制一份傳遞給函數,所以在函數執行之后,num本身的值並沒有被改變,函數中被改變的值僅僅是一個副本而已。
二.函數傳遞引用類型:

 

復制代碼
function setName(obj)
{ 
  obj.name="青島新銳"; 
} 
var web=new Object(); 
web.name="螞蟻部落";
setName(web); 
console.log(web.name);
復制代碼

 

以上代碼的彈出值是:“青島新銳”,下面進行一下分析:
聲明一個對象web,它是一個引用類型,當為函數傳遞參數的時候,是傳遞的web對象的引用,也就是此對象的內存地址,所以在函數中修改屬性的對象就是函數外面創建的對象本身。
三.加深理解:

 

復制代碼
function setName(obj)
{ 
  obj.name="青島新銳"; 
  obj=new Object(); 
  obj.name="螞蟻部落"; 
} 
var web=new Object(); 
setName(web); 
console.log(web.name);
復制代碼

 

以上代碼的彈出值是:青島新銳,很多人可能會以為將會彈出“螞蟻部落”,下面進行一下簡單的分析:
在函數外面創建一個對象,並將對象的引用賦值給變量web,web中存儲的是對象在內存中的存儲地址,當為函數傳遞參數時,就是傳遞的在函數外面創建的對象的地址。在函數中,為外面創建的對象創建一個自定義屬性name並賦值為“青島新銳”,然后又創建一個新的對象,並將新對象的地址賦值給obj,這個時候obj指向的並不是函數外面創建的對象,所以外面對象name屬性不會被改變。

函數內創建object對象不會改變外面的屬性值 web.name直接讀取函數的屬性

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9052

更多內容可以參閱:http://www.softwhy.com/javascript/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM