#### 拷貝 深拷貝:對象在賦值的時候拷貝的是對象的值 相似於值傳遞; 淺拷貝:對象在賦值的時候拷貝的是對象的索引 相似引用傳遞; 值傳遞:賦值 var a = 10;var b = a; b+=20; a=10;b=30; 引用傳遞:賦值地址一個改變地址內容改變;最終值同樣; 棧:基本數據類型 堆:存儲引用數據 淺: 2.Object.assign()參數1 目標值 參數2 3......須要合併的對象 3.擴展用算符 var newArr = {...obj}; 4.引入jQuery的前提下 $.extend 參數1 目標對象 參數2 合併對象 深: ``` 1.深度拷貝 $.extend 第一個值爲true是深拷貝 var obj = {goods:{id:2}; var newObj = $.extend(true,{},obj) newObj.goods.id = 100; 2.JSON.stringify JSON.parse不能拷貝函數var newObj = JSON.parse(JSON.stringify(obj)); 3.手動封裝 遞歸 function clone(Obj) { var newObj; if (Obj instanceof Array) { newObj = []; // 建立一個空的數組 var i = Obj.length; while (i--) { newObj[i] = clone(Obj[i]); } return newObj; } else if (Obj instanceof Object){ newObj = {}; // 建立一個空對象 for (var k in Obj) { // 爲這個對象添加新的屬性 newObj[k] = clone(Obj[k]); } return newObj; }else{ return Obj; } } ``` #### H5新增本地存儲 ##### webStorage : 1.localStorage :持久存儲 大小限制 5M 只能存儲字符串 沒有時間限制 沒有域的限制; 設置:localStorage .name = "dd"; localStorage ["age"] = 3; localStorage .setItem("key","value");自身帶有這個方法; 獲取:console.log(localStorage.getItem("key")) console.log(localStorage.name); console.log(localStorage[name]; 刪除: localStorage.removeItem("key"); delete localStorage.key; localStorage.clear();清除全部; 2,sessionStorage:臨時存儲; 其餘同上; 獲取: console.log(sessionStorage.getItem("key")) console.log(sessionStorage.name); console.log(sessionStorage[name]); #### cookie:會話跟蹤 ;有域的限制; 只能存儲字符串;時間限制;大小限制4kb‘ ##### 柯里化函數:將多個參數的函數轉化成一個參數的函數 add(2)(3)(4); 9 add(2,3,4) function add(a){ return function(b){ return function(c){ return a+b + c; } } } let add = (a)=>(b)=>(c)=>a+b+c;同上的簡化; console.log(add(2)(3)(4)); 但函數箭頭函數:var fn = ()=>({a:9});同等於function fn(){ return{ a:3, } }sss var fn = a = >a; 堆和棧 堆?? 存放關鍵字new建立的對象和數組。 堆內存被全部線程共享。 棧 存放8種基本類型的數據和對象引用(不是對象)。 每一個線程有本身的單獨的棧。 先進後出,後進先出 基本數據類型和引用數據類型 基本數據類型指的是簡單的數據段,引用數據類型指的是有多個值構成的對象。 引用類型? 也就是對象類型Object type,好比:Object 、Array 、Function 、Data等。 element:指一個總體必不可少或固有的部分,強調一個複雜總體中最基本、最簡單的元件、元素或成分等 component:指一個總體的組成部分。