国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

復制和引用復制

mmy123456 / 1937人閱讀

摘要:在編程語言中,賦值和參數傳遞可以通過值復制或者引用復制來完成,這取決于使用的是什么語法。但在中沒有指針這個概念,但也有這兩種復制,不過,在語法上沒有區別,并且引用指向的是值。

在編程語言中,賦值和參數傳遞可以通過value-copy(值復制)或者reference-copy(引用復制)來完成,這取決于使用的是什么語法。

C語言中有指針這個概念,如果要向函數傳遞一個數并在函數中更改它的值,可以通過‘&’傳遞變量,這就是reference-copy;若是沒有聲明為引用的話,就是通過value-copy的方式傳遞。

但在JavaScript中沒有指針這個概念,但也有這兩種復制,不過,在語法上沒有區別,并且引用指向的是值。這兩種復制完全根據值的類型來決定。

// 第一種
let a = 2;
let b = a; // b是a的值一個副本,也就是value-copy
b++;
a; //2
b; //3
// 第二種
let c = [1, 2, 3];
let d = c;  // d是[1, 2, 3]的一個引用,引用指向的是值哦,這是reference-copy
d.push(4);
c; // [1, 2, 3, 4]
d; // [1, 2, 3, 4]

由上可知,基本類型的值是通過值復制的方式來賦值或是傳遞的,基本類型有null、undefined、字符串、數字、布爾以及ES6中的symbol。
引用類型的值是通過引用復制的方式來賦值或是傳遞的,引用類型有數組、對象、函數等。
由于引用指向的是值本身而非變量,所以一個引用無法更改另一個引用的指向。也就是說,多個引用相互之間沒有引用/指向關系。關于這點,看代碼就清楚了,如下:

let c = [1, 2, 3];
let d = c;  // 這時d和c都為[1, 2, 3]

d = [4, 5, 6];
c; // [1, 2, 3]
d; // [4, 5, 6]
// d = [4, 5, 6];這句賦值語句并不會影響c指向值[1, 2, 3],除非b是指向c的,但上面我們已經說過‘引用指向的是值本身而非變量’?。?!
// 要知道直接賦值和push()是不一樣的,前者是重新引用,而后者是在引用的基礎上往里面加東西。
// 若是想要在引用的基礎上清空數組,可以用arr.length = 0的方式

特別要注意的一點是,那些基本類型,在初始化時,可以封裝成對象,可就算如此操作,還是更改不了‘它是基本類型值’的事實,所以還是value-copy,代碼如下:

function add(x) {
    x += 1;
}
let a = new Number(1); // typeof a => object
add(a); 
a;  // a為2,而不是3  

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101359.html

相關文章

  • 詳解js深淺復制

    摘要:從而也引出了所謂的深淺復制問題。附注對于淺復制,其實還有其他的實現方式,比如數組中和方法,對于這些還是希望大家自己了解,本本主要針對深淺復制的實現原理進行解析。 前言 在之前寫繼承的過程談到了深淺復制的問題,因為有讀者反映到需要解析,趁今天周末寫一篇解析,今天的主體相對之前來說理解難度低一些,篇幅可能也比較短,諸君按需閱讀即可。 從兩種數據類型說起 在js中,變量的類型可以大致分成兩種...

    Lin_YT 評論0 收藏0
  • JS的深淺拷貝

    摘要:引用類型之所以會出現深淺拷貝的問題,實質上是由于對基本類型和引用類型的處理不同。另外方法可以視為數組對象的淺拷貝。上面描述過的復雜問題依然存在,可以說是最簡陋但是日常工作夠用的深拷貝方式。 一直想梳理下工作中經常會用到的深拷貝的內容,然而遍覽了許多的文章,卻發現對深拷貝并沒有一個通用的完美實現方式。因為對深拷貝的定義不同,實現時的edge case過多,在深拷貝的時候會出現循環引用等問...

    xiaoxiaozi 評論0 收藏0
  • Python中的對象引用、可變性垃圾回收

    摘要:一對象引用基礎知識變量是標注而不是容器。也就是說元組中不可變的是元素的標識,但元組的值會隨著引用的可變對象變化而變化。在中每個對象的引用都會有統計。弱引用不會妨礙對象被當做垃圾回收。 導語:本文章記錄了本人在學習Python基礎之面向對象篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、明確變量保存的是引用這一本質;2、熟悉對象引用的基礎知識;...

    ytwman 評論0 收藏0
  • PHP 引用是個坑,請慎用

    摘要:發布時最大的變動是對象處理方式。這很容易被誤解為引用,但是存儲器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會使性能下降這個事實外,使用引用這種方式會使得代碼難以維護。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會議,其中八次會議里我進行了相關發言,...

    dockerclub 評論0 收藏0
  • 詳解js深淺復制問題

    摘要:二這么分的好處就是在于節省內存資源,便于合理回收內存詳解中的深淺復制有了上面的鋪墊,那么我們理解起深淺復制就變得容易的許多。 前言 對于前端開發來說,我們經常能夠遇到的問題就是js的深淺復制問題,通常情況下我們解決這個問題的方法就是用JSON.parse(JSON.Stringify(xx))轉換或者用類似于Inmmutable這種第三方庫來進行深復制,但是我們還是要弄懂其中原理,這樣...

    X1nFLY 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<