每日一篇——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. 实现模块化开发:通过使用闭包,可以创建模块化的代码结构。将相关的变量和函数放在闭包中,只暴露对外的接口,避免全局污染和命名冲突。
相关推荐
德育处主任Pro3 分钟前
前端玩转大模型,DeepSeek-R1 蒸馏 Llama 模型的 Bedrock 部署
前端·llama
程序员飞哥3 分钟前
如何设计多级缓存架构并解决一致性问题?
java·后端·面试
Jedi Hongbin30 分钟前
Three.js NodeMaterial 节点材质系统文档
前端·javascript·three.js·nodematerial
前端小马40 分钟前
前后端Long类型ID精度丢失问题
java·前端·javascript·后端
用户1456775610371 小时前
干净的图片批量处理,处理速度飞快
前端
用户1456775610371 小时前
亲测好用!简单实用的图片尺寸调整工具
前端
索西引擎1 小时前
npm、yarn、pnpm
前端·npm·node.js
天生我材必有用_吴用2 小时前
Vue3 + VitePress 搭建组件库文档平台(结合 Element Plus 与 Arco Design Vue)—— 超详细图文教程
前端
liu****2 小时前
基于websocket的多用户网页五子棋(八)
服务器·前端·javascript·数据库·c++·websocket·个人开发
San302 小时前
深入理解 JavaScript 函数:从基础到高阶应用
前端·javascript·node.js