拷贝的概念和方法

#### 拷贝

深拷贝:对象在赋值的时候拷贝的是对象的值  类似于值传递;

浅拷贝:对象在赋值的时候拷贝的是对象的索引  类似引用传递;

值传递:赋值 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:指一个整体的组成部分。 
原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10734617.html