每日一篇——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. 实现模块化开发:通过使用闭包,可以创建模块化的代码结构。将相关的变量和函数放在闭包中,只暴露对外的接口,避免全局污染和命名冲突。
相关推荐
翻滚吧键盘4 分钟前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
秃了也弱了。23 分钟前
Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器
前端·chrome
乆夨(jiuze)43 分钟前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
忧郁的蛋~1 小时前
HTML表格导出为Excel文件的实现方案
前端·html·excel
小彭努力中1 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
然我1 小时前
别再只用 base64!HTML5 的 Blob 才是二进制处理的王者,面试常考
前端·面试·html
NanLing1 小时前
【纯前端推理】纯端侧 AI 对象检测:用浏览器就能跑的深度学习模型
前端
呆呆的心1 小时前
前端必学:从盒模型到定位,一篇搞定页面布局核心 🧩
前端·css
小飞悟1 小时前
前端高手才知道的秘密:Blob 居然这么强大!
前端·javascript·html
小old弟1 小时前
用Sass循环实现炫彩文字跑马灯效果
前端