获得徽章 11
- V8引擎内存管理GC中, 使用到了mark-sweep算法,通过判断可达性来查找不再使用的对象,这个算法能够很好的解决循环依赖的问题,而在闭包中,因为函数与其包围的作用域环境形成了闭包,当我们执行一个使用了闭包的函数的时候,执行函数,函数进入执行上下文栈,此时函数会在栈顶形成自己的FEC(Function Execution Context),栈内同样会包含作用域链,JavaScript执行原理中,因为每个上下文会维护一个VO(Variable Object),而函数的拥有自己的上下文,其VO是函数的AO对象(Activation Object),内部会存储函数上下文中定义的变量、以及argument,当函数访问了外部变量后,查找规则为,会先从AO中查找,找不到则从作用域链中去查找,作用域链会从函数定义的上下文开始(不包含),包含其向外一层一层的上下文VO,这样去查找变量,由于函数作用域链中维持了外部函数的VO对象,所以外层函数的上下文信息会被保存不会释放(部分会被V8优化),这样就能够实现闭包,而也是因此,对象没有得到及时的释放,容易造成内存泄漏(OOM),所以对于闭包的使用上,我们应该即使的给闭包相关的引用置为null,这样就断开了mark-sweep算法中维持的图结构中,节点的联系,使得需要释放的对象在图中不可达,失去引用,从而被释放展开评论点赞
- #青训营笔记创作活动#
2月6日 打卡day8
今日学习
1. 通过简单有趣的案例,认识了Docker
2. 基本的安装
3. Dockerfile的基本编写和各项命令的介绍
4. 了解 docker 原理,如何模拟 docker 隔离环境及限制资源
展开评论点赞 - #青训营笔记创作活动#
2月5日 打卡day7
今日学习
pnpm相比于npm/yarn的优势和特性,比如速度快、高效利用磁盘空间、支持 monorepo、安全性高,
学习了npm以及pnpm的依赖管理,以及二者的区别,并对pnpm在行业内的应用进行了举例。
pnpm的基本使用
展开评论点赞 - #青训营笔记创作活动#
2月4日 打卡day6
今日学习
使用hover 延时触发实现事件监听、用CSS实现长按触发事件和轮播和暂停。
:hover配合transition延时、transitionend监听可以实现鼠标经过延时触发效果
:active配合transition延时、transitionend监听可以实现长按触发效果
CSS 动画设置infinite后配合animationiteration监听可以实现周期性触发效果
可以直接通过:hover来控制台动画的暂停和播放
展开评论点赞
![[可怜]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_5.ece2a96.png)
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)