目录
JavaScript 进阶 - 第4天
深浅拷贝
浅拷贝
深拷贝
递归实现深拷贝
js库lodash里面cloneDeep内部实现了深拷贝
JSON序列化
异常处理
throw
try ... catch
debugger
处理this
普通函数
箭头函数
改变this指向
call
apply
bind
防抖节流
浅拷贝
首先浅拷贝和深拷贝只针对引用类型
浅拷贝:拷贝的是地址
常见方法:
- 拷贝对象:Object.assgin() / 展开运算符 {…obj} 拷贝对象
- 拷贝数组:Array.prototype.concat() 或者 […arr]
如果是简单数据类型拷贝值,引用数据类型拷贝的是地址 (简单理解: 如果是单层对象,没问题,如果有多层就有问题)
深拷贝
首先浅拷贝和深拷贝只针对引用类型
深拷贝:拷贝的是对象,不是地址
常见方法:
- 通过递归实现深拷贝
- lodash/cloneDeep
- 通过JSON.stringify()实现
递归实现深拷贝
函数递归:
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
- 简单理解:函数内部自己调用自己, 这个函数就是递归函数
- 递归函数的作用和循环效果类似
- 由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件 return
讯享网
js库lodash里面cloneDeep内部实现了深拷贝
讯享网
JSON序列化
了解 JavaScript 中程序异常处理的方法,提升代码运行的健壮性。
throw
异常处理是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行
总结:
- throw 抛出异常信息,程序也会终止执行
- throw 后面跟的是错误提示信息
- Error 对象配合 throw 使用,能够设置更详细的错误信息
讯享网
总结:
- 抛出异常信息,程序也会终止执行
- 后面跟的是错误提示信息
- 对象配合 使用,能够设置更详细的错误信息
try … catch
总结:
- 用于捕获错误信息
- 将预估可能发生错误的代码写在 代码段中

- 如果 代码段中出现错误后,会执行 代码段,并截获到错误信息
debugger
相当于断点调试
了解函数中 this 在不同场景下的默认值,知道动态指定函数 this 值的方法。
是 JavaScript 最具“魅惑”的知识点,不同的应用场合 的取值可能会有意想不到的结果,在此我们对以往学习过的关于【 默认的取值】情况进行归纳和总结。
普通函数
普通函数的调用方式决定了 的值,即【谁调用 的值指向谁】,如下代码所示:
讯享网
注: 普通函数没有明确调用者时 值为 ,严格模式下没有调用者时 的值为 。
箭头函数
箭头函数中的 与普通函数完全不同,也不受调用方式的影响,事实上箭头函数中并不存在 !箭头函数中访问的 不过是箭头函数所在作用域的 变量。
在开发中【使用箭头函数前需要考虑函数中 的值】,事件回调函数使用箭头函数时, 为全局的 ,因此DOM事件回调函数不推荐使用箭头函数,如下代码所示:
讯享网
同样由于箭头函数 的原因,基于原型的面向对象也不推荐采用箭头函数,如下代码所示:
改变this指向
以上归纳了普通函数和箭头函数中关于 默认值的情形,不仅如此 JavaScript 中还允许指定函数中 的指向,有 3 个方法可以动态指定普通函数中 的指向:
call
使用 方法调用函数,同时指定函数中 的值,使用方法如下代码所示:
讯享网
总结:
- 方法能够在调用函数的同时指定 的值
- 使用 方法调用函数时,第1个参数为 指定的值
- 方法的其余参数会依次自动传入函数做为函数的参数
apply
使用 方法调用函数,同时指定函数中 的值,使用方法如下代码所示:
总结:
- 方法能够在调用函数的同时指定 的值
- 使用 方法调用函数时,第1个参数为 指定的值
- 方法第2个参数为数组,数组的单元值依次自动传入函数做为函数的参数
bind
方法并不会调用函数,而是创建一个指定了 值的新函数,使用方法如下代码所示:
讯享网
注: 方法创建新的函数,与原函数的唯一的变化是改变了 的值。
- 防抖(debounce)所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间
- 节流(throttle)所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/195143.html