zoukankan      html  css  js  c++  java
  • 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、延迟运行

  • 相关阅读:
    动态内存开辟(一)
    结构体,联合体,枚举,typedef
    练习使用C++的string类
    WIN10 + Qt 5.14(MSVC 2017,32bit) + APP项目(minGW-7.3.0 32bit)+glog
    扫雷游戏
    最小栈实现
    快速排序算法
    c++语句(循环)
    C++ 存储类
    C++ 运算符
  • 原文地址:https://www.cnblogs.com/styleFeng/p/14281131.html
Copyright © 2011-2022 走看看