JS函數中的參數傳遞

來源:互聯網
上載者:User

標籤:結果   堆記憶體   font   str   bool   ima   nbsp   引用   define   

資料類型

   在 javascript 中資料類型可以分為兩類:

  • 基本類型值 primitive type,比如Undefined,Null,Boolean,Number,String。
  • 參考型別值,也就是物件類型 Object type,比如Object,Array,Function,Date等。 

變數的複製

   眾所周知,js中變數的基本類型和參考型別儲存方式是不同的,這也就導致變數複製時也就不同了。如果從一個變數向另一個變數複製基本類型的值時,會將前者的值複製一個,然後將複製的值賦值到後者,因此這兩個值是完全獨立的,只是他們的value相同而已。

var num1 = 10;var num2 = num1;console.log(num2);//10

上面的num1中被儲存的值為10,當把num1的值賦值給num2時,num2的值也為10。但是這兩個10是完全獨立的,num2中的10隻是被複製出來的,相當於我寫了一個word文檔,把它放到了num1的檔案夾中,然後我再複製這個word文檔,就叫word副本吧,然後把這個副本放到num2的檔案夾下,這兩個word文檔是完全一樣的,修改任何一個都不會影響兩一個。

num2 += 1;console.log(num1); //10console.log(num2); //11

 從上面可以看出修改num2的值,num1的值未發生變化。再來看下參考型別的複製。當從一個變數向另一個變數複製參考型別的值時,同樣也會將儲存在變數對象中的值複製一份放到為新變數分配的空間中。

 

var obj1 = {  name : "111"};var obj2 = obj1;console.log(obj2.name); //111obj2.name = "222";console.log(obj1.name); //222

 第一次列印出的結果為“111”,這個我們很容易理解,但是第二次列印出來的是“222”,有點莫名其妙了。這就是參考型別和基本類型的不同之處了。複製對象時並不會在堆記憶體中新產生一個一模一樣的對象,只是多了一個儲存指向這個對象指標的變數罷了。將obj1的值複製給obj2,而這個值的副本實際上是一個指標,這個指標指向儲存在堆中的一個對象,也就是說建立了一個新的記憶體位址傳給了obj2,obj1和obj2兩個變數同時指向了同一個Object,當去改變這個對象時,他們的值都會改變,也就是說他們中任何一個作出的改變都會反映在另一個身上。下面的簡易圖可能更明了些。

 

 

  

JS函數中的參數傳遞

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.