一、深浅拷贝
1. 浅拷贝

注意:浅拷贝适合单层,不适合里面嵌套了复杂类型的
①、{... obj } 浅拷贝
拷贝后的对象,进行了修改,不会影响原对象的值
②、Object.assign( ,) 把后面的拷贝到前面
拷贝后的对象,进行了修改,也不会影响原对象的值
【总结】

2. 深拷贝

(1)通过递归实现深拷贝


如果属性值不是数组时,用黄框中的数据进行处理
如果属性值是数组时,怎么处理
是把数组取出来,再次遍历,然后装到新数组里面
注意:k 是个变量,变量只能用中括号的形式进行赋值
注意:应该先用蓝框中的部分把数组筛选走,再用黄框中的部分把对象筛选出来
数组属于对象,所以要先筛选数组
【总结】
深拷贝需要用到函数递归,可以做到新对象不影响旧对象。
当普通拷贝时,直接进行拷贝就好了,如果是数组,则再次调用这个递归函数就可以了
如果是对象,则再次用递归把对象解决
先 arr 后 对象
(2)js库lodash里面cloneDeep内部实现了深拷贝

(3)通过JSON.stringify( )实现

蓝框中把对象变为字符串,黄框中把字符串在变成对象
【总结】

二、异常处理
1. throw 抛异常


2. try /catch 捕获异常


finally 后面的代码就不执行了
【总结】

3. debugger

三、处理 this
1. this 指向
(1)普通函数的 this 指向谁

【例如】
【总结】

(2)箭头函数 thixs 指向

【注意情况】


【总结】

2. 改变 this
(1)call


(2)apply( )

必须以数组形式来传递数据
【使用场景】求数组最大值


注意:可以为空,但是不能省略
【总结】

(3)bind( )


【总结】

四、性能优化
1. 防抖


【案例】

(1)lodash

① 引入库

② 添加事件

(2)手写防抖函数
【代码】

为了鼠标每移动一次,都执行一次匿名函数的内容
t 就是 500
2. 节流 throttle

节流方法

【案例】

(1)lodash

【总结】

(2)手写防抖函数


注意:第一次判断有没有定时器,没有定时器,就开一个定时器
时间到了,就清除定时器
下一次判断的时候,没有定时器,就再开一次定时器
注意:在set Time out中是 无法删除 定时器的
因为定时器还在运作,所以使用 timer = null 而不是 clearTimeout ( timer )
【总结】

五、【综合案例】


注意:throttle 不管鼠标经过多少次,都只执行一次
一秒打印一次
时间有变化,就触发这个事件
【代码】

【总结】



好啦!本次的分享到这里就结束啦!!!JS部分的学习到这里也就结束啦!!!撒花撒花!
我们下次分享不见不散哦!!!




















