美文网首页前端
函数式编程学习笔记

函数式编程学习笔记

作者: 若年 | 来源:发表于2022-04-01 15:13 被阅读0次

一、偏函数:在函数调用现场(function call-site),将实参应用(apply) 于形参。

function getPerson(data,cb) {
    ajax( "http://some.api/person", data, cb );
}

function getOrder(data,cb) {
    ajax( "http://some.api/order", data, cb );
}

getOrder(data,cb) 是 ajax(url,data,cb) 函数的偏函数(partially-applied functions)。

更正式的说法是:偏函数严格来讲是一个减少函数参数个数(arity)的过程;这里的参数个数指的是希望传入的形参的数量。我们通过 getOrder(..) 把原函数 ajax(..) 的参数个数从 3 个减少到了 2 个。

二、函数柯里化:将一个期望接收多个实参的函数拆解成连续的链式函数(chained functions),每个链式函数接收单一实参(实参个数:1)并返回另一个接收下一个实参的函数

curriedAjax( "http://some.api/person" )
    ( { user: CURRENT_USER_ID } )
        ( function foundUser(user){ /* .. */ } );
var personFetcher = curriedAjax( "http://some.api/person" );

var getCurrentUser = personFetcher( { user: CURRENT_USER_ID } );

getCurrentUser( function foundUser(user){ /* .. */ } );

如果一个原函数期望接收 5 个实参,这个函数的柯里化形式只会接收第一个实参,并且返回一个用来接收第二个参数的函数。而这个被返回的函数又只接收第二个参数,并且返回一个接收第三个参数的函数。依此类推。

由此而知,柯里化将一个多参数(higher-arity)函数拆解为一系列的单元链式函数。

一些备忘:

闭包通过词法作用域提供“私有”状态,而对象将一切做为公共属性暴露。

提升代码可读性的唯一真相就是减少表面掩盖,读者必须可以预见到每一个给定变量的行为。

使有了闭包,你就有了一些可以更改代码的权限,而剩余的程序是受限的。当我们冻结一个对象,代码中没有任何部分可以被重设。此外,一旦一个对象被冻结,它不能被解冻,所以所有属性在程序运行期间都保持只读。

在我想允许重新赋值但是在表层限制的地方,闭包比起对象更方便和灵活。在我不想重新赋值的地方,一个冻结的对象比起重复 const 声明在我所有的函数中更方便一些。

通过const声明一个数组或者对象,对象的值或者数组的值是可以改变的,因为const只保存了其引用的地址,只会通过地址去找值。

相关文章

  • 函数式编程

    拉勾大前端的笔记,仅作为学习记录 课程介绍 为什么学习函数式编程,以及什么是函数编程 函数式编程的特性(纯函数,柯...

  • Scala 学习笔记

    Scala 学习笔记 1.函数式编程 函数式编程:函数式编程把函数当作一等公民,充分利用函数,支持函数的多种使用方...

  • Java 8函数式编程学习笔记

    Java 8函数式编程学习笔记 author:Gavin date:2018/11/09 什么是函数式编程 在思考...

  • 初入函数式编程

    真·函数式编程 学习函数式编程的学习笔记 禁用var/let,所有东西都用const定义,也就是说无变量,强制im...

  • 学习笔记

    学习笔记 函数式编程 函数式编程就是对运算过程的抽象,其中的函数是指数学中的函数即映射关系,相同的输入始终要得到相...

  • 2018-09-21

    java学习笔记(二) 前一篇简单的介绍了Java8函数式编程,这篇还将继续函数式编程之旅。 流 在Java程序中...

  • 理解函数式编程

    这篇文章是在学习函数式编程时的学习笔记,里面有很多自己对函数式编程的理解,有些理解可能不一定准确,希望对大家学习函...

  • 函数式编程

    为什么学习函数式编程 函数式编程随着react的流行受到越来越多的关注 vue3也开始拥抱函数式编程 函数式编程可...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

网友评论

    本文标题:函数式编程学习笔记

    本文链接:https://www.haomeiwen.com/subject/pcgcjrtx.html