js栈,堆。深浅拷贝,原型与原型链

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、JavaScript垃圾回收原理?

在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收

二、请描述值类型(基本数据类型)和引用类型的区别?

1.值类型

代码如下(示例):
1.占用空间固定,保存在栈中(当一个方法执行时,每个方法都会建立自己的内存栈,在这个方
法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自
然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;栈中存储的是基础变量以及
一些对象的引用变量, 基础变量的值是存储在栈中 ,而引用变量存储在栈中的是 指向堆中的数组 或者对象的地址 ,这就是为何修改引用类型总会影响到其他指向这个地址的引用变量。)
2.保存与复制的是值本身
3.使用typeof检测数据的类型
4.基本类型数据是值类型

2.引用类型

代码如下(示例):

1.占用空间不固定,保存在堆中(当我们在程序中创建一个对象时,这个对象将被保存到运行时
数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。
堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变
量所引用(方法的参数传递时很常见),则这个对象 依然不会被销毁 ,只有当一个对象没有任
何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。)
2.保存与复制的是指向对象的一个指针
3.使用instanceof检测数据类型
4.使用new()方法构造出的对象是引用型

三、深/浅拷贝?

深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。

1.深拷贝

深拷贝复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制。 深拷贝后的对象与原来的对象是完全隔离的,互不影响, 对一个对象的修改并不会影响另一个对象。

2.浅拷贝

浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。
可 以 使 用 for in 、 Object.assign 、 扩 展 运 算 符 … 、Array.prototype.slice()、Array.prototype.concat() 、递归等递归函数实现深拷贝

四、js原型/原型链?

1.原型

概念:
js中每一个构造函数都有一个与之对象的js对象来表示,这个对象中都有prototype属性,这个属性就叫函数的原型。原型就是函数对象的prototype属性。
优点:构造函数的所有实例化对象都可以共享函数原型的属性和方法。
缺点:函数的原型delete方法删除不掉

2.原型链

实例化一个对象,我们要使用对象的属性或者方法,他会先从当前对象进行查找,如果找不到,就去函数的原型中去查找,如果原型中也不存在,就去函数的父对象查找,如果最终没找到,返回undefined。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值