• 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、延迟运行

  • 相关阅读:
    MySQL 修改数据
    Scala 简介
    tensorflow mnist read_data_sets fails
    Mac安装Homebrew
    MySQL 创建数据表
    MySQL 数据类型
    wc--Linux
    xxx is not in the sudoers file.This incident will be reported.的解决方法
    linux centos下安装dokuwiki
    CentOS修改系统时间
  • 原文地址:https://www.cnblogs.com/styleFeng/p/14281131.html
Copyright © 2020-2023  润新知