JavaScript-基础概念

柯里化

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数”。如对于有两个变量的函数 yx,如果固定了 y = 2,则得到有一个变量的函数 2x。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 普通的add函数
function add(x, y) {
return x + y;
}
// Currying后
function curryingAdd(x) {
return function (y) {
return x + y;
};
}
add(1, 2); // 3
curryingAdd(1)(2); // 3

不可变数据

不可变数据(Immutable Data)的思想就是,一旦创建就不能被修改的数据,所有对 Immutable Data 的改变,最终都会返回一份新复制的数据,各自的数据并不会互相影响。

函数式编程

函数式编程是一种编程范式,和面向对象的编程方式一样,是一种编程思想。它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。它的原理将电脑运算视为函数的计算,它的基础是 λ 演算,λ 演算的函数可以接受函数当作输入和输出。最主要的特征是,函数是第一等公民。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用。函数式编程认为,只有纯的没有副作用的函数,才是合格的函数。

1
2
3
4
5
6
7
8
9
(1 + 2) * 3 - 4;
// 传统的过程式编程,可能这样写:
var a = 1 + 2;
var b = a * 3;
var c = b - 4;
// 函数式编程,可能这样写:
var result = subtract(multiply(add(1,2), 3), 4);