1. 堆栈
    1. 在javascript中,堆内存是用来存放引用类型的空间环境
    2. 而栈内存,是存储基本类型和指定代码的环境
    3. 在对象中的属性名具有唯一性,数字属性名=字符串属性名,但是在测试的时候你会发现,好像所有属性名都会自动转换成字符串,但事实却不是这样,Symbol就是最好的证明。
      let a={}
      let b=Symbol("1");
      let c=Symbol("1")
      a[b]=123;
      a[c]=123456;
      console.log(a[b]);
      console.log(a);

       

  2. 克隆拷贝:基本都是对于对象或数组而言,以多维对象为例子,也就是对象嵌套对象
    1. 浅拷贝
      1. 只拷贝第一层:对于多重嵌套的对象来说,浅拷贝的意思就是指拷贝第一层,也就是因为对象名只是指向对象再堆中的地址,浅拷贝只是把地址复制一份,而不是重新开辟内存空间。
      2. let obj1={name:"chengjunfeng",
        age:18,
        love:{
        gril:"Mary",
        sport:"run",
        Mary:{
        age:20,
        love:"sing"
        }
        }
        }
        function copy(obj){
        let obj2={};
        for(let key in obj){//只拷贝第一层
        if(!obj.hasOwnProperty(key)) break;//不需要拷贝私有的
        obj2[key]=obj[key];
        }
        return obj2;
        }
        let obj3=copy(obj1);
        console.log(obj1);
        console.log(obj3);
        //当我修改obj3.love.gril的时候,obj1也会变,
        obj3.love.gril="Li";
        console.log(obj3.love.gril);
        console.log(obj1.love.gril); //使用ES6中的解构对象也可以直接实现浅拷贝
        let obj4={...obj1};
        console.log(obj4);
    2. 深拷贝:把对象中的每一层都进行拷贝,可以采用递归的思路
      let obj1={name:"chengjunfeng",
      age:18,
      love:{
      gril:"Mary",
      sport:"run",
      Mary:{
      age:20,
      love:"sing"
      }
      }
      }
      function deepcopy(obj){
      // 递归终止条件
      if(typeof obj !=='object') return obj;
      if(obj===null) return null;
      if(obj instanceof RegExp) return new RegExp(obj);
      if(obj instanceof Date) return new Date(obj);
      let obj2={};
      for(let key in obj){
      if(obj.hasOwnProperty(key))
      obj2[key]=deepcopy(obj[key]);
      }
      return obj2;
      }
      let obj3=deepcopy(obj1);
      console.log(obj1);
      console.log(obj3);
      //当我修改obj3.love.gril的时候,obj1的不会变,
      obj3.love.gril="Liiii";
      console.log(obj3.love.gril);
      console.log(obj1.love.gril); //也可使用JSON进行转换;但是JSON.stringify对于日期函数正则会出错
      let obj4=JSON.parse(JSON.stringify(obj1))
      console.log(obj4);
  3. 闭包
    1. 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数1内部创建另一个函数2,函数2就有权访问函数1的变量,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
    2. 闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。


       

javascript中的堆栈、深拷贝和浅拷贝、闭包的更多相关文章

  1. 探究JS中对象的深拷贝和浅拷贝

    深拷贝和浅拷贝的区别 在讲深拷贝和浅拷贝的区别之前,回想一下我们平时拷贝一个对象时是怎么操作的?是不是像这样? var testObj1 = {a: 1, b:2}, testObj2=testObj ...

  2. PHP中对象的深拷贝与浅拷贝

    先说一下深拷贝和浅拷贝通俗理解 深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个 浅拷贝:赋值时,引用赋值,相当于取了一个别名.对其中一个修改,会影响另一个 PHP中, = ...

  3. js 中引用类型 的深拷贝 和 浅拷贝的区别

    一.曾经在读JQ源码的时候,对深拷贝算是有了一点的理解.我们在项目中是不是经常会遇到这样的问题呢? 后台返回一个数组对象(引用类型).次数在页面渲染中需要对部分数据进行处理 比如:银行卡6234509 ...

  4. 谈谈java中对象的深拷贝与浅拷贝

    知识点:java中关于Object.clone方法,对象的深拷贝与浅拷贝 引言: 在一些场景中,我们需要获取到一个对象的拷贝,这时候就可以用java中的Object.clone方法进行对象的复制,得到 ...

  5. Python中复制、深拷贝和浅拷贝的区别

    深拷贝定义(deepcopy) 在Python中,由于一切皆对象,所以任何变量都可以被引用,也即可以被赋值给任何变量.但是在Python中,给变量赋值,是区分的,一般情况下,Python中的变量赋值都 ...

  6. javascript中数组的深拷贝的方法

    一.什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用"="来直接把一个数组赋值给一个变量,如 var a=[1,2,3]; var b=a; consol ...

  7. Python中什么是深拷贝和浅拷贝且有什么区别

    浅拷贝: >>> a = [1, 2, 3] >>> b = a >>> a [1, 2, 3] >>> b [1, 2, 3] ...

  8. 在js中如何区分深拷贝与浅拷贝?

    一.自我理解 简单来讲就是:深拷贝层层拷贝,浅拷贝只拷贝第一层. 在深拷贝中,新对象中的更改不会影响原对象,而在浅拷贝中,新对象中的更改,原对象中也会跟着改. 在深拷贝中,原对象与新对象不共享相同的属 ...

  9. 睡不着,复习一下C++基础中的基础(深拷贝与浅拷贝)

    #include <iostream> #include <string> #include <assert.h> using namespace std; //声 ...

随机推荐

  1. 报错 version `GLIBCXX_3.4.22' not found

    from . import pypocketfft as pfft ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GL ...

  2. stm32存储器映像和标准库中定义外设地址的方法

    结合存储器映像理解stm32标准库中定义外设地址的方法. stm32f103zet6是32位的.它所能访问的地址空间范围为2^32=4GB,把4GB分为8个block,分别为block0-block- ...

  3. Python进阶之浅谈内置方法(补充)

    目录 列表类型的内置方法 元组类型的内置方法 字典类型的内置方法 集合类型的内置方法 列表类型的内置方法 1.作用:描述名字,说的话等 2.定义方式 s=['tim','age'] s=str('ti ...

  4. sql server 分组查询结合日期模糊查询

    分组查询: https://www.cnblogs.com/netserver/p/4518995.html 日期格式化格式: http://blog.csdn.net/qq_16769857/art ...

  5. Netty系列之源码解析(一)

    本文首发于微信公众号[猿灯塔],转载引用请说明出处 接下来的时间灯塔君持续更新Netty系列一共九篇 当前:Netty 源码解析(一)开始 Netty 源码解析(二): Netty 的 Channel ...

  6. html中map area 热区自适应的原生js实现方案

    在做自适应网页的时候,如果在图片中使用了热区map.图片可以通过样式实现:图片大小随页面变化,但是MAP中每个area的坐标并不能通过css直接实现自适应.这篇文章就介绍通过原生js来实现:MAP中每 ...

  7. 【线型DP】【LCS】UVA_10635 Prince and Princess

    嘤嘤嘤,我又来了,刚A完就写,这个沙雕题有丶恶心.                  ???时间4.11发现所有表情包都莫得了 题目: In an n×n chessboard, Prince and ...

  8. day56 js收尾,jQuery前戏

    目录 一.原生js事件绑定 1 开关灯案例 2 input框获取焦点,失去焦点案例 3 实现展示当前时间,定时功能 4 省市联动 二.jQuery入门 1 jQuery的两种导入方式 1.1 直接下载 ...

  9. flutter gradle版本不一致

    我们有时候拿到别人的项目时,直接运行可能会报错,因为gradle版本不一样,此时需要修改这两个地方: 要把这两个版本改成你本地的版本就可以了,怎么看呢,一般你自己创建过flutter项目,里面也有这个 ...

  10. PHP使用array_filter查找二维数组中符合字段和字段值的数据集合

    1.方法: /** * 获取符合字段和字段值的数组集合 * @param array $data 待过滤数组 * @param string $field 要查找的字段 * @param $value ...