发表于: 2017-06-22 23:45:18

1 848


今天完成的事情:


RxJS是一套由Observable sequences(可观察序列)来组合异步行为和事件基础程序的库!更确切地说是指Functional Programming(函数式编程) 及Reactive Programming(响应式编程) 两个编程思想的结合。


Reactive Programming之前讲过,只要一有绑定的变量发生改变,相关的变量及画面也会跟着变动,不需要写这其中如何通知发生变化的每一步代码,只需要专注在发生变化时要做什么事,必须是由变量或数据主动告知!


Functional Programming 核心思想就是做运算处理,并用function来思考问题

(5+6)-1*3 可以写成

const add = (a, b) => a + b
const mul = (a, b) => a * b
const sub = (a, b) => a - b

sub(add(5, 6), mul(1, 3))

把每个运算包成一个个不同的function,并用这些function组合出我们要的结果,这就是最简单的Functional Programming。


Functional Programming的基本条件

First class

是指跟其他data type有同等地位,函数能被赋值给变量,函数也能够被当作参数传入另一个函数,也可以当作一个函数的回传值.

函数能够被赋值给变量:

var hello = function() { }

函数能够被当作参数传入:

fetch('www.google.com')
.then(funtion(response) {})   //function被传入then()

函数能够被当作回传值

var a = function(a) {
    return function(b) {
      return a + b;
    };
}


Functional Programming的重要特性:

Expression, no Statement是表达式,而不是陈述式

表达式是一个运算过程,一定会有返回值,例如执行一个function:

add(1,2)

陈述式则是表现某个行为,例如一个赋值给一个变数:

a = 1;


Pure Function纯函数

是指一个function 给予相同的参数,永远会回传相同的返回值,并且没有任何显著的副作用(Side Effect):

var arr = [1, 2, 3, 4, 5];

arr.slice(0, 3); // [1, 2, 3]

arr.slice(0, 3); // [1, 2, 3]

arr.slice(0, 3); // [1, 2, 3]

slice不管执行几次,返回值都是相同的,并且除了返回一个值(value)之外并没有做任何事,所以slice就是一个pure function.


var arr = [1, 2, 3, 4, 5];

arr.splice(0, 3); // [1, 2, 3]

arr.splice(0, 3); // [4, 5]

arr.slice(0, 3); // []

换成用splice,因为splice每执行一次就会影响arr的值,导致每次结果都不同,这就很明显不是一个pure function.


Side Effect副作用

是指一个function做了跟本身运算返回值没有关系的事,比如说修改某个全局变量,或是修改传入参数的值,甚至是执行console.log都算是Side Effect。


Referential transparency引用透明

pure function 不管外部环境如何,只要参数相同,函式执行的返回结果必定相同。这种不依赖任何外部状态,只依赖于传入的参数的特性也称为引用透明


利用参数保存状态:

function findIndex(arr, predicate, start = 0) {
if (0 <= start && start < arr.length) {
if (predicate(arr[start])) {
return start;
}
return findIndex(arr, predicate, start+1);
}
}
findIndex(['a', 'b'], x => x === 'b'); // 找 'b' 的 index

在findIndex中故意多塞了一个参数用来保存当前找到第几个index的状态,这就是利用参数保存状态!


明天计划的事情:

继续学习angular和es6


注意的问题:

用到了回调会制造多层的stack frame(栈帧)详情:http://tobylxy.iteye.com/blog/1728439

会导致运算速度较慢


收获:

如上



返回列表 返回列表
评论

    分享到