函数式编程
本文是阅读《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个可访问的作用域:
- 在它自身声明之内的变量
- 对全局变量的访问
- 对外部函数变量的访问
柯里化与偏应用
术语
一元函数
只接受一个参数的函数
二元函数
接受两个参数的函数
变参函数
可自由设定参数个数的函数
function a (...args) {
console.dir(args)
}柯里化
柯里化就是把多参函数转化为医院函数的过程
组合与管道
组合
每一个程序的输出,将称为另一个程序的输入参数
函子
函子是一个普通对象, 它实现了map函数, 在遍历每个对象值的时候生成一个信对象。
简单说, 函子是一个持有值的容器。
小知识: 用箭头函数创建的函数,不能 new , 原因是 箭头函数 不具备
Construct和prototype