javascript中的堆栈、深拷贝和浅拷贝、闭包
- 堆栈
- 在javascript中,堆内存是用来存放引用类型的空间环境
- 而栈内存,是存储基本类型和指定代码的环境
- 在对象中的属性名具有唯一性,数字属性名=字符串属性名,但是在测试的时候你会发现,好像所有属性名都会自动转换成字符串,但事实却不是这样,Symbol就是最好的证明。
let a={}
let b=Symbol("1");
let c=Symbol("1")
a[b]=123;
a[c]=123456;
console.log(a[b]);
console.log(a);
- 克隆拷贝:基本都是对于对象或数组而言,以多维对象为例子,也就是对象嵌套对象
- 浅拷贝
- 只拷贝第一层:对于多重嵌套的对象来说,浅拷贝的意思就是指拷贝第一层,也就是因为对象名只是指向对象再堆中的地址,浅拷贝只是把地址复制一份,而不是重新开辟内存空间。
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);
- 深拷贝:把对象中的每一层都进行拷贝,可以采用递归的思路
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);
- 浅拷贝
- 闭包
- 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数1内部创建另一个函数2,函数2就有权访问函数1的变量,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
- 闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。
javascript中的堆栈、深拷贝和浅拷贝、闭包的更多相关文章
- 探究JS中对象的深拷贝和浅拷贝
深拷贝和浅拷贝的区别 在讲深拷贝和浅拷贝的区别之前,回想一下我们平时拷贝一个对象时是怎么操作的?是不是像这样? var testObj1 = {a: 1, b:2}, testObj2=testObj ...
- PHP中对象的深拷贝与浅拷贝
先说一下深拷贝和浅拷贝通俗理解 深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个 浅拷贝:赋值时,引用赋值,相当于取了一个别名.对其中一个修改,会影响另一个 PHP中, = ...
- js 中引用类型 的深拷贝 和 浅拷贝的区别
一.曾经在读JQ源码的时候,对深拷贝算是有了一点的理解.我们在项目中是不是经常会遇到这样的问题呢? 后台返回一个数组对象(引用类型).次数在页面渲染中需要对部分数据进行处理 比如:银行卡6234509 ...
- 谈谈java中对象的深拷贝与浅拷贝
知识点:java中关于Object.clone方法,对象的深拷贝与浅拷贝 引言: 在一些场景中,我们需要获取到一个对象的拷贝,这时候就可以用java中的Object.clone方法进行对象的复制,得到 ...
- Python中复制、深拷贝和浅拷贝的区别
深拷贝定义(deepcopy) 在Python中,由于一切皆对象,所以任何变量都可以被引用,也即可以被赋值给任何变量.但是在Python中,给变量赋值,是区分的,一般情况下,Python中的变量赋值都 ...
- javascript中数组的深拷贝的方法
一.什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用"="来直接把一个数组赋值给一个变量,如 var a=[1,2,3]; var b=a; consol ...
- Python中什么是深拷贝和浅拷贝且有什么区别
浅拷贝: >>> a = [1, 2, 3] >>> b = a >>> a [1, 2, 3] >>> b [1, 2, 3] ...
- 在js中如何区分深拷贝与浅拷贝?
一.自我理解 简单来讲就是:深拷贝层层拷贝,浅拷贝只拷贝第一层. 在深拷贝中,新对象中的更改不会影响原对象,而在浅拷贝中,新对象中的更改,原对象中也会跟着改. 在深拷贝中,原对象与新对象不共享相同的属 ...
- 睡不着,复习一下C++基础中的基础(深拷贝与浅拷贝)
#include <iostream> #include <string> #include <assert.h> using namespace std; //声 ...
随机推荐
- python将指定目录下的所有文件夹用随机数重命名
我的目的在于打乱数据顺序,便于GAN训练: import random import os path = 'hunhe_7' #目标文件夹 listname = os.listdir(path) #遍 ...
- git和github入门指南(5)
5.github上的标签 5.1.标签的作用 给当前版本打一个标签,在github上就会形成一个releases版本 点击进去后,用户就可以下载对应版本的源代码 5.2.在本地git工具上创建标签,同 ...
- java中的Arrays这个工具类你真的会用吗
Java源码系列三-工具类Arrays 今天分享java的源码的第三弹,Arrays这个工具类的源码.因为近期在复习数据结构,了解到Arrays里面的排序算法和二分查找等的实现,收益匪浅,决定研读 ...
- Jquery中$(document).ready()
window.onload = function(){ alert("welcome"); } 语句的作用是希望在页面加载完,自动执行定义js代码(function). $(doc ...
- Centos7 上安装FastDFS
Centos7 上安装 FastDFS 本文章摘抄于 风止鱼歇 博客地址:https://www.cnblogs.com/yufeng218/p/8111961.html 1.安装gcc(编译时需要 ...
- 注解式HTTP请求Feign (F版)
Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态).使用Sprin ...
- 【Oracle】arraysize的研究(存在疑问)
arraysize的研究(存在疑问) SYS@proc> create table aaa (id1 int,id2 int,id3 int,id4 int); Table created. S ...
- JVM类加载机制小结
这篇文章我们关注一个问题:Java程序是怎么进入JVM并执行的?经常写Java程序的小伙伴应该都听说过类加载机制,在<深入理解Java虚拟机>里周老师已经讲的很清楚了,这篇随笔把之前的笔记 ...
- 常用API - 时间日期类
Date类 概述 java.util.Date类 表示特定的瞬间,精确到毫秒. 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期 ...
- Win10+YOLOv3完整安装过程(亲测可运行)
最近了解并尝试在Win10安装YOLOv3,参考了十几篇文章,发现每个人都有自己的安装方式,最初尝试用cmake编译,虽然安装完成,但无法使用GPU,坑非常多,经2天努力终于安装成功,分享并记录自己的 ...