JavaScript進階程式設計(第2版) 之 JavaScript的傳值方式

來源:互聯網
上載者:User

說起傳值方式就不得不先說說變數的資料類型及相應類型的儲存方式。JavaScript是一種弱類型語言,在我們應用的過程中省去了聲明變數類型這一步驟,而是交給了編譯器自己去判斷具體類型。

然而我們不用去聲明不代表它沒有自己的資料類型,像csharp一樣,從大的方面它分為了實值型別、參考型別兩大類。實值型別(Number、String、Null、 Undefined、Boolean)的變數會把值儲存在記憶體棧上,我們訪問的就是這個直接的值。而參考型別(Object及其衍生類別)會在記憶體棧上儲存真實值的地址,訪問時我們通過這個地址去尋找真實的值,這個值確切的是儲存在記憶體堆上。

不同的儲存方式就註定了不同的訪問方式及賦值過程、傳參等行為。

在JavaScript中沒有csharp中的ref, 及c++中 &指定的引用傳值方式。一律是按值傳遞!我們都指定,實值型別、參考型別的“值”是不同的,後者的值是一個指標,是一個地址。所以我們參數傳值的時候傳遞的也只是一個地址而已。這種方式看似引用傳值,因為它確實可以改變傳入對象的值。而真正的我們可以通過例子證明它不是引用傳值,如下:

<script type="text/javascript">

<!--

         var o = new Object();

         o.name = 'A';

 

         function t(o)

         {

                   o.name = 'B';

                   o = new Object();

                   o.name = 'C';

         }

 

         t(o);

 

         alert(o.name); // B

//-->

</script>

 

我們可以看到結果是B, 證明確實非引用傳值!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.