闭包造成的内存泄露如何解决
内存泄漏
内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束,
造成系统内存占用越来越大,最终导致程序运行缓慢甚至系统崩溃等严重后果
闭包:
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四次挥手关闭客户端和服务器的连接
浏览器解析文档资源并渲染页面