#### 拷贝 深拷贝:对象在赋值的时候拷贝的是对象的值 类似于值传递; 浅拷贝:对象在赋值的时候拷贝的是对象的索引 类似引用传递; 值传递:赋值 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:指一个整体的组成部分。