js闭包与柯里化

闭包

什么是闭包?

引用《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、延迟运行

 

posted @ 2021-01-15 11:17  JS-Feng  阅读(485)  评论(0)    收藏  举报