每日一篇——23秋招JS面经(7)

每日一篇------23秋招JS面经(7)

⭐为什么0.1+0.2!=0.3

  1. 二进制通过64位 IEEE754存储,但二进制浮点数小数位只能存52位,多出的位数会遵循为1则进位,为0则舍去的规则处理,会导致第一次精度丢失
  2. 在0.1+0.2时,小数位相加导致小数位又多出一位,又进行1进0舍操作,又造成一次精度丢失
  3. 综上导致了0.1+0.2!=0.3

⭐什么是内存泄露

定义:内存泄漏是指程序在动态分配内存后,无法释放或回收不再需要的内存空间的现象。当对象或数据被分配内存后,如果程序没有正确释放或回收这些内存空间,就会导致内存泄漏。

内存泄漏的几个常见情况包括:

  1. 未正确释放事件监听器:如果一个对象被注册为某个事件的监听器,但在不需要它时未手动移除,这将导致该对象无法被垃圾回收。例如,当使用 addEventListener 注册事件监听器时,需要使用 removeEventListener 手动移除对应的监听器。
  2. 闭包中的变量引用:闭包是指函数可以访问并持有其词法环境中的变量。如果在闭包中引用了一些不再使用的变量,这些变量将无法被及时释放。解决方法是确保不再需要的变量解除引用或将其设置为 null
  3. 定时器未清理:使用 setTimeoutsetInterval 创建的定时器,如果不及时清除,会导致函数或对象在定时器仍在运行时不能被垃圾回收。确保在不需要定时器时使用 clearTimeoutclearInterval 清除。
  4. 循环引用:循环引用是指两个或多个对象相互引用,形成一个闭环,导致垃圾回收器无法判断其中哪个对象可以被释放。这通常发生在对象之间的相互引用,例如父子关系或对象之间的交互。解决方法是在不再需要引用时手动断开循环引用,例如将对象的引用设置为 null
  5. 大量缓存数据:如果程序中大量使用缓存,而没有有效地清理过期或不再使用的缓存数据,这些数据将继续占用内存。需要定期检查和清理不再需要的缓存数据。

⭐说一说闭包

定义:闭包是引用了另一个函数作用域变量的函数,通常是在嵌套函数中实现的。

我们常通过闭包来实现:

  1. 保护变量:通过闭包,可以创建一个私有的作用域,使得外部无法直接访问到其中的变量。这样可以防止变量被意外修改,提高代码的安全性。
  2. 延长变量生命周期:当一个函数执行完毕后,其内部的变量通常会被销毁。但是如果有闭包存在,那么这些变量将会被保存在闭包中,因此可以在函数执行完毕后继续访问和使用这些变量。
  3. 实现数据封装:通过闭包,可以模拟实现面向对象编程中的私有属性和方法。将内部的变量和函数封装在闭包中,只暴露需要暴露的接口,隐藏内部实现细节。
  4. 创建特殊的函数:闭包可以用来创建具有记忆效果的函数,即每次调用都会记住之前的状态和计算结果。这对于某些计算或递归操作非常有用。
  5. 实现模块化开发:通过使用闭包,可以创建模块化的代码结构。将相关的变量和函数放在闭包中,只暴露对外的接口,避免全局污染和命名冲突。
相关推荐
qiyi.sky2 分钟前
JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)
java·前端·笔记·学习·tomcat
清云随笔23 分钟前
axios 实现 无感刷新方案
前端
鑫宝Code25 分钟前
【React】状态管理之Redux
前端·react.js·前端框架
忠实米线33 分钟前
使用pdf-lib.js实现pdf添加自定义水印功能
前端·javascript·pdf
pink大呲花36 分钟前
关于番外篇-CSS3新增特性
前端·css·css3
少年维持着烦恼.40 分钟前
第八章习题
前端·css·html
我是哈哈hh43 分钟前
HTML5和CSS3的进阶_HTML5和CSS3的新增特性
开发语言·前端·css·html·css3·html5·web
田本初1 小时前
如何修改npm包
前端·npm·node.js
明辉光焱1 小时前
[Electron]总结:如何创建Electron+Element Plus的项目
前端·javascript·electron