@[toc]
JavaScript
性能优化API
requestIdleCallback 浏览器空闲时执行低优先级任务,如:日志上报 requestAnimationFrame 下一帧渲染时执行回调函数,如:优化替换定时器来实现动画 intersectionObserver 监听某个元素是否进入或离开视口,如:常用于实现图片懒加载 resizeObserver DOM 元素尺寸的变化,如:echart页面变化图表变化
数据类型
基本类型:Number、String、Boolean、null、Undefined、Symbol、BigInt 引用类型: Function、Object、Array
判断类型
typeof、instanceof、Object.prototype.toString.call()
for in 和 for of的区别
for...in 循环出的是 key,for...of 循环出的是 value(es6新增)
call、apply 和 bind的区别
call:立即调用,显示指定this,参数列表 apply:立即调用,显示指定this,参数数组 bind:创建一个新的函数,永久绑定 this 值和部分参数(不立即执行)
如何对一个对象进行深度 clone
- JSON.parse(JSON.stringify({})) 2.递归手动实现 3.structuredClone()(现代浏览器)
js 数组去重,能用几种方法实现
1.es6 set 方法 2.利用新数组 indexOf 查找 indexOf() 方法可返回某个指定的元素在数组中首次出现的位置。如果没有就返回-1。 3.利用 for 嵌套 for,然后 splice 去重
事件捕获、事件冒泡、阻止事件冒泡、阻止默认事件
事件捕获:从上到下捕获 事件冒泡:从下到上冒泡 阻止事件冒泡:e.stopPropagation() 阻止默认事件:e.preventDefault()
js绑定、移除事件
Element.addEventListener、Element.removeEventListener
js延时加载
defer:异步下载脚本(不阻塞 HTML 解析),脚本在 HTML 文档解析完成后(DOMContentLoaded 事件前)执行,顺序执行。 async:异步下载脚本(不阻塞 HTML 解析),脚本下载完成后立即执行(会阻塞 HTML 解析),谁先加载先执行。
js 防抖和节流
防抖:当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时 如:输入框输入事件、window 触发 resize 的时候 节流:当持续触发事件时,保证一定时间段内只调用一次事件处理函数 如:按钮提交、触底加载更多
原型链理解
定义:JavaScript 中所有都是对象,在 JavaScript 中,原型也是一个对象,通过原型可以实现对象的属性继承,JavaScript 的函数对象中都包含了一个” prototype”内部属性,这个属 性所对应的就是该函数对象的原型。 作用:主要作用就是为了实现继承与扩展对象
class 和普通构造函数有何区别?
- 语法区别 2.本质关系:class 是语法糖;class 在语法上更加贴合面向对象的写法;class 的底层仍是基于原型链(Prototype)的实现,Babel 转译后的代码就是普通构造函数。
EventLoop 事件循环机制
定义:事件循环(Event Loop)是JavaScript运行时环境(如浏览器或Node.js)处理异步操作的核心机制。它解决了JavaScript单线程执行模型下如何高效处理I/O操作、定时器、事件回调等非阻塞任务的难题。 解决:JavaScript被设计为单线程,以避免复杂的多线程同步问题(如死锁) 宏任务:包括整体代码 script,setTimeout,setInterval 微任务:Promise.then(非 new Promise),process.nextTick(node 中) 事件的执行顺序:先执行宏任务,然后执行微任务,任务有同步的任务和异步的任务,同 步的进入主线程,异步的进入 Event Table 并注册函数,异步事件完成后,会将回调函数放在队 列中,如果还有异步的宏任务,那么就会进行循环执行上述的操作。
js中队列、栈、堆的区别
队列:先进先出;像排队,先来的先离开。 栈:后进先出;像叠盘子,最后放的先取出。 堆:树形结构,通过父子节点的大小关系维护性质;像金字塔,顶部总是最大/最小值。
闭包
定义:一个函数(子函数)访问另一个函数(父函数)中的变量。 优点: 数据封装:通过闭包创建私有变量,避免全局污染; 状态保持:函数可"记住"创建时的环境,适用于回调、事件处理等场景,如:防抖、节流
缺点: 内存泄漏:闭包阻止垃圾回收释放外部变量。解决方案:手动释放,不再需要的闭包函数设为 null(如 closureFn = null)
内存泄漏
导致:计时器、闭包
垃圾回收机制
定义:Javascript 具有自动垃圾回收机制,会定期对那些不再使用的变量、对象所占用的内存进行释放,原理就是找到不再使用的变量,然后释放掉其占用的内存。 方式:标记清除、引用计数(常用)
VUE
vue生命周期
vue2:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed vue3:setup() 、onBeforeMount 、onMounted 、onBeforeUpdate 、onUpdated 、onBeforeUnmount 、onUnmounted
更新中。。。-