题目笔记(闭包,深复制和浅复制,原生js实现Promise)

就面试笔试题的一些笔记:

  • 闭包( 实现add(2)(5) )
  • 深复制和浅复制
  • 原生js实现Promise
△ –>闭包知识:

实现add(2)(5)

function add (x) {
return function(y) { return x + y; };
}

△ –>深复制和浅复制:

深拷贝 与 浅拷贝: 循环引用和函数是不能通过 stringify 进行深拷贝的

  • 对于循环引用和函数是无法通过stringify和parse的方法进行深拷贝的,关于循环引用,可以通过查找循环点来断掉这个循环,再进行深拷贝。

遇到的问题 :
* 解决数组浅拷贝的问题:
直接等于 = arr1=arr2;
slice和concat方法可以进行简单素组的深拷贝
由于数组内部属性值为引用对象,因此使用slice和concat对对象数组的拷贝,整个拷贝还是浅拷贝,拷贝之后数组各个值的指针还是指向相同的存储地址。
因此,slice和concat这两个方法,仅适用于对不包含引用对象的一维数组的深拷贝

  • 解决数组深拷贝的问题:
    也是通过 stringify 和 parse 的方法进行深拷贝,

  • 解决深拷贝的问题:
    先把数据进行stringify转换 ,再进行一次parse转换。
    JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串
    JSON.parse() 方法解析JSON格式数据并构造一个由字符串描述的JavaScript对象/值

  • 总结:

    1. 浅拷贝相当于引用地址的复制,两个变量指针是共享(引用)同一个对象。obj1 === obj2
    2. 深拷贝相当于为另外一个对象开辟内存空间,并进行递归复制内部属性。两个对象的引用地址是不一样的(即不是引用同一个对象)。obj1 !== obj2
    3. 可以通过”赋值操作符”、Object.assign()、数组遍历赋值等实现浅拷贝。
    4. 可以通过自定义代码、JSON对象的方法(JSON.parse和JSON.stringify)、JQuery.extend()等实现深拷贝。
    5. 目前来说,并没有统一的标准方法来解决”循环引用”,从而实现真正的深拷贝。
  • 比如 react 里面有大量的对象复制,用 immutable 就很好。
    对付 deep clone, 最好的办法是抛弃需要 deep clone 的代码

  • 实际开发中 除了通过 stringify 和 parse 的方法进行深拷贝,
    eg:
    let item = JSON.parse(JSON.stringify(temp));
    item[‘recharge_principal’] = FormatMoneyByM(temp[‘recharge_principal’]);
    为此还采用了其他方式对数据做了处理,
    为了避免改变数据的值,直接将通过格式化函数后,加入数组中。不采用中间变量来传递值。
    eg:
    let temp = data.list [ key ] || { } ;
    principal_arr.push ( CalculateMoneyByMm ( temp[ ’ principa l’ ] || 0 ) );

△ –> 用原生js实现promise:

ES6中Promise可以说很大情况下改善了异步回调的嵌套问题

第一:Promise构造函数接受一个函数作为参数,函数里面有两个参数resolve和reject分别作为执行成功或者执行失败的函数
var promise=new Promsie(function(resolve,rejec){
   
    if(/*异步执行成功*/){
        resolve(value);
    }else{
     
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值