学习笔记

2020-08-19  本文已影响0人  Vicky丶Amor

学习笔记

函数式编程

函数式编程就是对运算过程的抽象,其中的函数是指数学中的函数即映射关系,相同的输入始终要得到相同的输出(纯函数)。

函数是一等公民

函数是一等公民是我们后面要学习的高阶函数、柯里化等的基础

使用高阶函数的意义:

闭包

可以在另一个作用域中调用一个函数的内部函数并访问到该函数作用域中的成员

闭包的本质:函数在执行的时候会放到一个执行栈上,当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员。

纯函数

相同的输入永远会得到相同的输出,而且没有任务可观察的副作用。

纯函数的好处:

副作用

副作用让一个函数变得不纯,如果函数依赖于外部的状态就无法保证输出相同,就会带来副作用。

副作用来源:

柯里化(Currying)

总结:

函数组合

函数组合(compose):如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数

函数组合要满足 结合律
(associativity)

我们既可以把 g 和 h 组合,还可以把 f 和 g 组合,结果都是一样的

<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 0.9em; display: block; padding: 1.6em; margin: 0px 0px 1.6em; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(250, 250, 250); border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">let f = compose(f, g, h)
let associative = compose(compose(f, g), h) == compose(f, compose(g, h));
// true</pre>

lodash/fp

PointFree

我们可以把数据处理的过程定义成与数据无关的合成运算,不需要用到代表数据的那个参数,只要把简单的运算步骤合成到一起,在使用这种模式之前我们需要定义一些辅助的基本运算函数。

Functor(函子)

什么是函子?

MayBe 函子

Either 函子

IO 函子

folktale

Pointed 函子

Monad 函子

JavaScript 性能优化

内存管理

介绍

垃圾回收与常见 GC 算法

JavaScript 中的垃圾

JavaScript 中的可达对象

引用计数算法

引用计数算法优点:

引用计数算法缺点:

标记清除算法

标记清除算法优点:

标记清除算法缺点:

标记整理算法

标记整理算法优缺点:

V8 引擎的垃圾回收

认识V8

V8 垃圾回收策略

V8 中常用的 GC(Garbage Collection) 算法

V8 内存分配

新生代对象回收实现

回收细节说明

老生代对象说明

老生代对象回收实现

细节对比

V8 总结

Performance 工具

为什么使用 Performance

Performance 使用步骤

内存问题的外在表现

界定内存问题的标准

监控内存的几种方式

如何确定存在频繁的垃圾回收?

代码优化实例

如何精准测试 JavaScript 性能

jsperf 使用流程

慎用全局变量

上一篇 下一篇

猜你喜欢

热点阅读