freeCodeCamp-学习的第6天

130 阅读2分钟

函数式编程

函数式编程是一种方案简单、功能独立、对作用域外没有任何副作用的编程范式:INPUT -> PROCESS -> OUTPUT

函数式编程:

1)功能独立——不依赖于程序的状态(比如可能发生变化的全局变量);

2)纯函数——同一个输入永远能得到同一个输出;

3)有限的副作用——可以严格地限制函数外部对状态的更改**。**

介绍一些术语

Callbacks 是被传递到另一个函数中调用的函数。 你应该已经在其他函数中看过这个写法,例如在 filter 中,回调函数告诉 JavaScript 以什么规则过滤数组。

函数就像其他正常值一样,可以赋值给变量、传递给另一个函数,或从其它函数返回,这种函数叫做头等 first class 函数。 在 JavaScript 中,所有函数都是头等函数。

将函数为参数或返回值的函数叫做高阶 ( higher order) 函数。

当函数被传递给另一个函数或从另一个函数返回时,那些传入或返回的函数可以叫做 lambda。

了解纯函数

纯函数的返回结果只依赖其参数

返回值只和函数参数有关,与外部无关。无论外部发生什么样的变化,函数的返回值都不会改变。

// 纯函数 返回结果只依赖于它的参数 x 和 b,foo(1, 2) 永远是 3。今天是 3,明天也是 3,在服务器跑是 3,在客户端跑也 3,不管你外部发生了什么变化,foo(1, 2) 永远是 3。只要 foo 代码不改变,你传入的参数是确定的,那么 foo(1, 2) 的值永远是可预料的。
const a = 1
const foo = (x, b) => x + b
foo(1, 2) // => 3

函数执行的过程中没有副作用

函数执行的过程中对外部产生了可观察的变化,我们就说函数产生了副作用。
例如修改外部的变量、调用DOM API修改页面,发送Ajax请求、调用window.reload刷新浏览器甚至是console.log打印数据,都是副作用。

map() 是一个纯函数,它的输出仅取决于输入的数组和作为参数传入的回调函数。 此外,它接收另一个函数作为它的参数。`

写一个自己的map()

Array.prototype.veMap = function(callback) {
  var newArray = [];
  this.forEach(a => newArray.push(callback(a)));
  return newArray;
};

# 使用 filter 方法从数组中提取数据

chinese.freecodecamp.org/learn/javas…