每日一篇——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. 实现模块化开发:通过使用闭包,可以创建模块化的代码结构。将相关的变量和函数放在闭包中,只暴露对外的接口,避免全局污染和命名冲突。
相关推荐
重生之后端学习1 小时前
02-前端Web开发(JS+Vue+Ajax)
java·开发语言·前端·javascript·vue.js
繁依Fanyi2 小时前
用 CodeBuddy 实现「IdeaSpark 每日灵感卡」:一场 UI 与灵感的极简之旅
开发语言·前端·游戏·ui·编辑器·codebuddy首席试玩官
来自星星的坤4 小时前
【Vue 3 + Vue Router 4】如何正确重置路由实例(resetRouter)——避免“VueRouter is not defined”错误
前端·javascript·vue.js
香蕉可乐荷包蛋8 小时前
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
前端·javascript·es6
未来之窗软件服务9 小时前
资源管理器必要性———仙盟创梦IDE
前端·javascript·ide·仙盟创梦ide
冬瓜的编程笔记10 小时前
【八股战神篇】MySQL高频面试题
数据库·mysql·面试
liuyang___10 小时前
第一次经历项目上线
前端·typescript
西哥写代码10 小时前
基于cornerstone3D的dicom影像浏览器 第十八章 自定义序列自动播放条
前端·javascript·vue
独行soc10 小时前
2025年渗透测试面试题总结-百度面经(题目+回答)
运维·开发语言·经验分享·学习·面试·渗透测试·php
清风细雨_林木木10 小时前
Vue 中生成源码映射文件,配置 map
前端·javascript·vue.js