Skip to content

函数式编程

本文是阅读《Beginning Functional JavaScript》一书的笔记

什么是函数式编程

函数的第一原则是要小, 函数的第二原则是要更小

函数是一个数学定义,函数式编程技术主要基于数学函数和它的思想。

特点:

  • 函数必须总是接受一个参数
  • 函数必须总是返回一个值
  • 函数应该一句接受到的参数而不是外部环境运行
  • 给定一个x, 只会输出固定的y

函数方法的区别

函数是一段可以通过其名称被调用的代码。

方法是一段必须通过其名称以及关联对象的名称被调用的代码

var s = a => a  // 简答函数
s(5)

var s = {simple : a => a}
s.simple(5) // 用其名称及关联对象调用

引用透明性

所有的函数对于相同的输入都将只会返回相同的结果, 这一属性叫 Referential Transparency

“引用透明性” 来源于分析哲学。 该哲学分支研究自然语言的语义和含义。

指令式,声明式和抽象

函数式编程主张声明式编程和编写抽象的代码。

指令式编程在告诉程序该怎么做

声明式编程则告诉程序要做什么

函数式编程的好处

纯函数

纯函数是给定输入并返回相同输出的函数

  • 纯函数产生可测试的代码
  • 纯函数产生合理的代码
  • 纯函数允许我们并发的执行代码
  • 纯函数是可缓存的
  • 纯函数易于使用管道和组合

JavaScript ES6 函数基础

一个简单的JS函数

let simpleFn = () => 'Hello, World'

严格模式

"use strict"

严格模式可以在文件开头,全文将进入严格模式, 也可以只在特定函数中使用严格模式

Return 是可选的

例如上马的简单JS函数中,省略了return

多语句函数

函数内部进行了多于一条语句的函数

let, var, const

  • let 是特定块作用域的声明
  • var 是全局作用域的声明
  • const 常量声明

高阶函数

简单理解为,一个可以接受函数为参数的函数,为高阶函数

javaScript 数据类型

  • Number
  • String
  • Boolean
  • Object
  • null
  • undefined
  • function

闭包

简单说,闭包就是一个内部函数,即另一个函数内部的函数。

const a = () => {
  const b = () => {}
}

函数b即为闭包函数

闭包有3个可访问的作用域:

  1. 在它自身声明之内的变量
  2. 对全局变量的访问
  3. 对外部函数变量的访问

柯里化与偏应用

术语

一元函数

只接受一个参数的函数

二元函数

接受两个参数的函数

变参函数

可自由设定参数个数的函数

function a (...args) {
  console.dir(args)
}

柯里化

柯里化就是把多参函数转化为医院函数的过程

组合与管道

组合

每一个程序的输出,将称为另一个程序的输入参数

函子

函子是一个普通对象, 它实现了map函数, 在遍历每个对象值的时候生成一个信对象。

简单说, 函子是一个持有值的容器。

小知识: 用箭头函数创建的函数,不能 new , 原因是 箭头函数 不具备 Constructprototype

Released under the ISC License.