【JS高级】高阶函数
什么是高阶函数
高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出。
此时fn就是一个高阶函数
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数。
闭包
变量作用域
什么是闭包
闭包( closure )指有权访问另一个函数作用域中变量的函数。----- JavaScript高级程序设计简单理解就是,一个作用域可以访问另外一个函数内部的局部变量。
闭包的好处
- 闭包的作用:延申了变量的使用范围
- 一个作用域可以访问另外一个函数内部的局部变量
闭包的坏处
- 常驻内存会增加内存的使用量,使用不当容易导致内存泄露。
- 若不需要的情况下,在其他函数中创建函数是不明智的,因为闭包对脚本性能有负面影响,包括处理速度和内存消耗。
闭包的应用1.
内部函数访问外部函数的局部变量(点击事件打印出的i访问到了立即执行函数的i)产生了闭包
闭包的应用2
定时器中的i使用到了立即执行函数中的i
什么是递归
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。
简单理解:函数内部自己调用`自己这个函数就是递归函数
递归函数的作用和循环效果一样
由于递归很容易发生“栈溢出”错误( stackoverflow ),所以必须要加退出条件return.
递归的应用1
递归的应用2
用来实现深拷贝
浅拷贝和深拷贝
浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用 拷贝的只是地址
深拷贝拷贝多层,每一级别的数据都会拷贝.开辟一个新空间存放对象
浅拷贝
或使用object.assign(拷给谁,源头)
如果遇到更深一层的对象的话,只会拷贝他的地址