对象的解构赋值与防抖

58 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

let和const区别

var:有预解析,没有块级作用域

let:没有预解析,有块级作用域

let num=10  
    num=20
console.log(num)//20 值可以改变

let 是变量 、let声明的变量值是可以改变的

const num1=10
      num1=20
console.log(num1)//10 值不可以改变

const是常量、值不可以改变

常量只能在声明的时候赋值一次,之后无法改变

const声明引用类型指的是栈内存不可修改

解构赋值

变量赋值的简写形式

对象解构赋值

注意要是同名属性,不同名只能混合用

第一种:取出对象的值 赋值给 变量

let  obj={
    name:'张三',
    age:18,
    sex:'nan'
}
//ES5传统赋值方式
let name=obj.name
let age=obj.age
​
ES6解构赋值  
​
声明变量,自动取右边对象的同名属性赋值
let {name,age,sex}=obj 
​

第二种:取出变量值,赋值给对象

let name='张三'
let age=18//ES5传统赋值方式
let obj={
    name:name,
    age:age,
    eat:function(){
      console.log('123')
    }
}
​
ES6解构赋值  同名
let  obj={
    name,   // name:name
    age,   // age:age
    eat(){//eat:function(){}
     console.log('123')   
    }
}

左边 是给谁,右边 是取谁,变量花括号

默认值 备胎

数组解构赋值

//第一种:将数组的值赋值给变量
    let arr = [1, 2, 3, 4]
    let [num1, num2, num3, num4] = arr
        console.log(num1, num2, num3, num4)//1,2,3,4
 //第二种 将变量的值赋值给数组
    let a = 1
    let b = 2
    let c = 3
    let arr2 = [a, b, c]
   console.log(arr2)//[1,2,3]

函数参数解构赋值

 let obj = {
            name: '张三',
            sex: "男",
            age: 16
        }
​
function fn({ name, sex, age }) {   //形参会声明变量  类似let {name, sex, age}        最终显示let {name, sex, age}=boj
   console.log(name, sex, age)
       
}
  fn(obj)

函数解构赋值,实参必须的对象,则形参可以使用解构赋值

函数默认值 备胎

箭头函数

箭头函数:其实就是function的 简写

箭头函数语法:(1)去掉function,改成=>

(2)形参小括号移到=>左边

(3)let 函数名= ()=>{}

 //原来的具名函数和匿名函数
     function fn() {
          console.log(11)
     }
       fn()
​
​
     let fn1 = function () {
         console.log(22)
         
       }
         fn1() 
​
​
箭头函数   let fn = (形参) => {函数代码}
​
        let fn = (a, b) => {
            return a + b
        }
        console.log(fn(1, 2))
​
如果只有一个形参,则可以省略形参小括号(没有参数不能省)
        let fn1 = a => {
            return a * 10
        }
        console.log(fn1(1))
​
如果大括号只有一行代码,则可以省略大括号,此时return也必须要省略
        let fn2 = a => a * 10
        console.log(fn2(1))

箭头函数的this指向:通过作用域链,指向上一级的this

展开运算符

作用:相当于遍历对象的简写

场景:添加数组

展开运算符    ...
//将arr2的所有元素 添加到arr1数组里
let arr1=[1,2,3,4,5]
let arr2=[6,7,8,9]
​
arr1.push(...arr2)//展开  arr1.push(arr2[0],arr2[1]...)
​

set数据类型

作用:set是集合,里面存储不重复的元素

场景:数组去重

let set=new Set(参数)
​
let set=new Set([1,2,3,3,4,4,5,6])
consolo.log(set)//{1,2,3,4,5,6}
​
​
set转成数组类型
let arr=[...set]//将set里的数据一一的展开
console.log(arr)//[1,2,3,4,5,6]

性能优化

函数防抖

作用:连续多次触发某个事件,则只执行最后一次

场景:手风情、搜索框

步骤: 
      (1) 声明变量存储定时器id       第一次赋值为null
      (2)在每一次事件触发时,清理上一次的定时器
      (3)事件触发时,先不触发,开启定时器,时间到了再触发

函数节流

作用:间隔时间内,事件只被触发一次

场景:降低高频事件触发的频率 比如:onmousemove onscroll

步骤: 
       (1)声明一个变量time存储上一次的触发时间    第一次赋值为null2)判断,当前触发时间-上一次触发的时间   是否符合我节流的时间
       (3)符合就触发,并且time保存本次触发时间,它就变成上次触发时间了