闭包
什么是闭包?
引用《javaScript高级教程》中的概念,闭包是指有权访问另一个函数作用域中的变量的函数。
简单描述就是在函数A中,返回一个函数B,函数B可以直接访问函数A中的变量,那么函数B就称为函数A的闭包。
案例:
function calculator(){ let i = 0 return function(){ console.log(i) i++ } } let add = calculator() add() //0 add() //1 add() //2
优点:
1、实现缓存,不被垃圾回收
2、保护函数内的变量安全,不被外界所污染
3、利用闭包特性实现柯里化
缺点:
1、内存消耗,闭包产生的变量无法销毁,解决方法是可以在使用完变量后手动为它赋值为null,避免内存泄露。
2、性能问题,由于闭包内部变量优先级高于外部变量,在查找上要多查一层作用域链,对速度有影响。
柯里化
什么是柯里化?
柯里化(Currying)是把接受多个参数的函数转变为单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
简单描述:
1、通过闭包管理
2、支持链式调用
3、每次运行返回一个 function
function calculator(type){ return function(text){ return typeof text === type } } const string = calculator("string") const number = calculator("number") console.log(string("123")) //验证是否为字符串类型 console.log(number(123)) //验证是否为number类型
使用的好处:
1、参数复用
2、提前确认
3、延迟运行