如何避免闭包引起的内存泄漏

闭包造成的内存泄露如何解决

内存泄漏

内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束,

造成系统内存占用越来越大,最终导致程序运行缓慢甚至系统崩溃等严重后果

闭包:

1.函数嵌套外层函数

2.外部引用返回内部函数

3.内层使用外层变量

闭包的优点

  • 访问其他函数内部变量

  • 变量长期驻扎在内存中,不会被内存回收机制回收,即延长变量的生命周期

  • 避免定义全局变量所造成的污染

闭包的缺点

大量使用闭包,造成内存占用空间增大,有内存泄露的风险

如何避免闭包引起的内存泄漏

在退出函数之前,将不使用的局部变量赋值为null;

在哪些地方应用了闭包

防抖与节流

什么是垃圾回收机制

js具有“自动”的垃圾回收机制即 执行环境会负责管理代码执行过程中使用的内存

不再使用的变量即生命周期结束的变量会被释放,只能是局部变量

全局变量的生命周期,直到浏览器卸载页面才会结束

闭包由于内部函数原因,外部函数不能算结束,无法释放内存

说说JS原型和原型链

原型:函数都有prototype(显示原型)属性,而prototype会自动初始化一个空对象,这个对象就是原型对象

原型对象中会有一个constructor属性,这个属性将指向了函数本身

实例化对象都有一个_proto_(隐式原型)属性,_proto_属性指向原型对象

原型链:从实例对象往上找构造这个实例的相关对象,然后这个关联的对象再往上找,找到创造它的上一级的原型对象,以此类推,一直到object.prototype原型对象终止,原型链结束.

原型链中的原型对象中的内容,是会被不同的实例所共有的

keep-alive作用

keep-alive标签包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染

vue 父子组件生命周期执行顺序

挂载阶段

执行顺序为:

父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted

更新阶段

执行顺序为:

父beforeUpdate -> 子beforeUpdate -> 子updated -> 父updated

销毁阶段

执行顺序为:

父beforeDestroy -> 子beforeDestroy -> 子destroyed -> 父destroyed

规律就是:父组件先开始执行,然后等到子组件执行完,父组件收尾。

浏览器输入url到页面展示出来的全过程

用户在浏览器中输入url地址

浏览器解析域名得到服务器ip地址

TCP三次握手建立客户端和服务器的连接

客户端发送HTTP请求获取服务器端的静态资源

服务器发送HTTP响应报文给客户端,客户端获取到页面静态资源

TCP四次挥手关闭客户端和服务器的连接

浏览器解析文档资源并渲染页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值