什么是节流防抖,什么是深拷贝浅拷贝?

109 阅读2分钟

什么是防抖?什么是节流?

防抖原理

在事件被触发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对象里面的数据,而且还拷贝它里面的子对象)

赋值: 获得该对象的引用地址