闭包:
闭包是指 有权访问另一个函数作用域中的变量 的函数。
简单的来说 就是 一个函数在执行过程中 返回另一个函数对象 (引用类型 一般都是函数)
如何形成闭包?
1. 在函数内容中, 返回一个引用类型(数组, 对象, 函数, 以函数为主)
2. 返回的引用类型(数组, 对象, 函数, 以函数为主), 使用函数中的局部作用域变量
3. 在函数的外部, 有变量来引用 引用类型
函数在执行过程中返回了另一个函数, 该函数使用父函数中的变量或方法, 导致返回的函数通过作用域链一直引用父作用域的AO对象导致父作用域的AO对象一直得不到释放
优点:
1. 闭包中的数据只要不释放,可以一直存储(长时间存储数据)
2. 可以在函数外访问函数内的数据
3. 减少全局变量的使用 (模块化)
缺点:
1. 父作用域的AO对象一直得不到释放,占内存; 如果闭包使用频率过高会导致内存泄漏
2. 函数外可以访问函数内的数据,不安全
柯里化(Currying)
是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术
一、什么是函数柯里化
函数柯里化就是我们给一个函数传入一部分参数,此时就会返回一个函数来接收剩余的参数。
二、简单的柯里化的实现
没有柯里化实现的案例
将其转化为柯里化的案例
上述代码可简写为