涉及到幾個知識點,分別是:堆棧、基本數據類型、引用數據類型。
堆棧:兩者都是臨時存放數據的地方。棧區(qū)(stack) 由編譯器自動分配釋放內存 ,后進先出,存放函數的參數值,局部變量的值等。 堆區(qū)(heap) 一般由程序員動態(tài)分配釋放內存,若程序員不釋放,程序結束時可能由OS回收。?堆(數據結構):堆可以被看成是一棵樹,如:堆排序; 棧(數據結構):一種先進后出的數據結構。
基本數據類型:number,string,boolean,null,undefined五類,名值存儲在棧內存中。

引用數據類型:(Object類)有常規(guī)名值對的無序對象{a:1},數組[1,2,3],以及函數等。名存在棧內存中,值存在于堆內存中,但是棧內存會提供一個引用的地址指向堆內存中的值。

認識深拷貝和淺拷貝
javascript中一般有按值傳遞和按引用傳遞兩種復制,按值傳遞的是基本數據類型(Number,String,Boolean,Null,Undefined),一般存放于內存中的棧區(qū),存取速度快,存放量?。话匆脗鬟f的是引用類型(Object,Array,Function,Symbol),一般存放與內存中的堆區(qū),存取速度慢,存放量大,其引用指針存于棧區(qū),并指向引用本身。
深拷貝和淺拷貝是相對于引用類型而言的:
淺拷貝: 指兩個js 對象指向同一個內存地址,其中一個改變會影響另一個;
深拷貝: 指復制后的新對象重新指向一個新的內存地址,兩個對象改變互不影響。
深拷貝的常用方式:
1,遞歸
2,JSON.parse(JSON.stringfiy(obj));
3,$.extend(true,{},obj);
4,lodash中的_.clone(obj, true);
5,_.cloneDeep(obj)?
參考文章:詳解javascript的深拷貝與淺拷貝