什么是防抖?什么是节流?
防抖原理
在事件被触发n秒后再执行回调,如果在这n秒内再出输入,时间重新计算。
使用场景
- 按钮提交场景:防止多次提交按钮,只执行最后提交的一次
- 服务端验证场景:表单验证需要服务端配合,执行一段连续的输入,还有搜索联想词功能类似
- 输入框场景:输入框连续输入
代码如下
const debounce = (func,wait =50) =>{
let timer = 0
return function(...args){
if(timer) clearTimeout(timer)
timer = setTimeout(()=>{
func.apply(this,args)
},wait)
}
}
节流原理
规定在一定单位时间内只触发一次函数,如果这个单位时间内触发多次函数,只有一次生效
使用场景
- 拖拽场景:固定时间内只执行一次,防止超高频次触发位置变动
- 缩放场景:监控浏览器resize调整大小
- 动画场景:避免短时间内多次触发动画引起性能问题
代码如下
const throttle = (func,wait=50)=>{
let lastTime = 0
return function(...args){
let now = +new Date()
if(now - lastTime > wait){
func.apply(this,args)
}
}
}
setInstalval(
thorttle(()=>{
console.log('500毫秒 输入一次')
},500)
)
什么是深拷贝?浅拷贝?
首先要了解js 的数据类型
7种基本数据类型
number,string,boolean,undefined,null,es6的symbol,es10的bigint
两种引用数据类型
常用的有 object function
那么
基本数据类型和引用数据类型的存储方式又有什么不同
基本数据类型:变量名和值都储存在栈内存中
引用数据类型:变量名储存在栈内存中,值储存在堆内存中,
但是堆内存中会提供一个引用地址指向堆内存中的值,
而这个地址是储存在栈内存中的
注意这里的 栈 和 堆
引用类型的值存储在堆中,在栈中用一个引用地址表示
浅拷贝: 也就是拷贝A对象里面的数据,但是不拷贝A对象里面的子对象
深拷贝: 会克隆出一个对象,数据相同,但是引用地址不同(就是说 拷贝A对象里面的数据,而且还拷贝它里面的子对象)
赋值: 获得该对象的引用地址