JavaScript函数式编程读书笔记
Javascript函数式编程读书笔记.
第一章 Javascript函数式编程简介
- 总是返回一个布尔值(只会返回true或者false)的函数称为谓词.
- 函数式编程的定义:
- 确定抽象,并为其构建函数;
- 利用已有的函数来构建更为复杂的函数;
- 通过将已有的函数传给其他的函数来构建更为复杂的函数.
第二章 一等函数与Applicative编程
JavaScript的编程方式:
- 命令式编程:通过详细描述行为的编程方式;
- 基于原型的面相对象编程:基于原型对象及其实例的编程方式;
- 元编程:对JavaScript执行模型数据进行编写和操作的编程方式。
数组的reduce
- reduce是对数组的累加器,一个接受两个参数;
- 第一个参数是对数组的回调函数,这个函数一个接收四个参数:previousValue(上一个值),currentValut(当前值),index(当前数组索引),array(调用的数组);
- 第二个参数是第一个执行回调函数时作为previousValue使用的,如果不传这个参数,则回调函数第一次执行会把第一个元素当成priviousValue,第二个元素当成currentValue开始执行。
this指向函数调用时的上下文.
call和apply的区别
- 第一个参数都是执行函数调用的上下文,即指定this;
- call传参数是一个一个传的,apply传参数是以数组的形式传的。
Object.keys
等同与Reflect.ownKeys
, 都是返回目标对象的键的组成的数组。- applicative编程–函数A作为参数提供给函数B。
- 接受函数作为参数或者返回函数的函数叫做高阶函数。
第三章 变量的作用域和闭包
作用域的含义
- this绑定的值。
- this绑定的值定义的执行上下文。
- 一个变量的生命周期。
- 变量的值解析方案,或词法绑定。
闭包不但可以捕获变量,还可以捕获参数,利用箭头函数实现的链式编程也是利用闭包可以捕获函数参数的特性,每次只传一个参数,在最后的函数中统一处理,这种函数也叫函数的柯里化,这种函数还有一种好处,就是像一种工厂函数,每个阶段都可以传入不同的参数,以生成不同的函数留给后续调用。
- 变量的捕获发生在创建闭包的时候,闭包一旦捕获到变量,如果变量再变化是不会改变闭包捕获到的变量的。
- 利用闭包保存私有变量的方式:
const pingpong = (function() {
let PRIVATE = 0;
return {
inc: n => PRIVATE += n,
dec: n => PRIVATE -= n
}
})()
// 只能通过这种方式调用
pingpong.inc(5);
pingpong.dec(15);
// 不用担心外部拿到PRIVATE这个变量
pingpong.div = n => PRIVATE / n;
pingpong.div(3); // PRIVATE is not defined