相關理解
注意:閉包中的變數存在在堆記憶體中而非棧記憶體中。
賦值與淺拷貝
array.prototype.slice實現對陣列的淺拷貝
array.prototype.concat將陣列和陣列或和值連線在一起成新的陣列
…擴充套件運算子
實現淺拷貝
原理:新的物件複製已有物件中非物件屬性的值和物件屬性的引用。
function shadowclone(sources) ;
for (var key in sources)
} return target;
}
深拷貝:
會拷貝乙份一模一樣的物件,從堆記憶體中開闢乙個新的區域存放新物件,新物件與原物件不共享記憶體,修改新的物件不會改變原物件。
例項:
json.parse()/json.stringify()
json.stringify()把一物件序列化成乙個json字串,將物件的內容轉換成字串的形式再儲存在磁碟上,在用json.parse()反序列化json字串成為乙個新的物件。【不可處理函式】
注意:
第三方深拷貝庫lodash中_.clonedeep()
實現深拷貝
原理:運用遞迴思想,遍歷物件和陣列直到裡面所有為基本資料型別,然後再去複製。
//定義檢測資料型別的功能函式
function isobject(obj)
function clonedeep(source)
var target = array.isarray ? : {};
for (var key in source) else
})}}
賦值、淺拷貝與深拷貝區別:
操作和原資料是否指向同一物件
第一層資料為基本資料型別
原資料中包含子物件賦值是
改變使原資料一同改變
改變使原資料一同改變
淺拷貝否
改變不會使原資料一同改變
改變使原資料一同改變
深拷貝否
改變不會使原資料一同改變
改變不會使原資料一同改變
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
淺拷貝與深拷貝
淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...