深浅复制,作用域提升的超简单总结

深浅复制,作用域提升的超简单总结。


#看了看网上的资源讲一大堆,有啥用呢,看我直接上代码。

// An highlighted block
	DeepClone(target) {
      if (typeof target == "object") {
        if (Array.isArray(target)) {
          let arr = [];
          for (let key = 0; key < target.length; key++) {
            typeof target[key] == "object"
              ? arr.push(this.DeepClone(target[key]))
              : arr.push(target[key]);
          }
          return arr;
        } else {
          let obj = {};
          for (let key in target) {
            if (typeof target[key] == "object") {
              obj[key] = this.DeepClone(target[key]);
            } else {
              obj[key] = target[key];
            }//写着写着完了前面的想法了。 做啥子判断,直接 obj[key] = this.DeepClone(target[key]) 
            //就好了
          }
          obj._proto_ = target._proto_;
          return obj;
        }
      } else {
        return target;
      }
      //let const 无变量提升 js 执行  var 声明变量是在编译阶段申明的。 js代码先编译再执行。
      //所以会有变量提升的问题。 但是let 等es6 非编译阶段声明。无问题。
      //v-for 因为 闭包问题 函数执行完毕后返回
    },
    ShallowCopy(){ //浅复制因为直接赋值,对象的赋值只是引用并不是新建了新的对象。所以导致了 
    //联动的对象修改。 这个会影响使用
      if (typeof target == "object") {
        if (Array.isArray(target)) {
          let arr = [];
          for (let key = 0; key < target.length; key++) {
            arr.push(target[key]);
          }
          return arr;
        } else {
          let obj = {};
          for (let key in target) {
            obj[key] = target[key];
          }
          return obj;
        }
      } else {
        return target;
      }
    },
    box() {//关于闭包的
      var arr = [];
      for (var i = 0; i < 5; i++) {
        arr[i] = function() {
          return i;
        };
      }//因为闭包问题。会导致for循环完成后返回一堆函数给数组。 数组再调取函数作用域里的i, i已经成为5了;
      //  函数自执行。不要返回函数吗。   另一种就是使用块级作用域的let了
      return arr;
    },
    box2() {//解决上面问题
      var arr = [];
      for (var i = 0; i < 5; i++) {
        arr[i] = (function() {
          return i;
        })();
      }
      return arr;
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值