纯函数的好处

纯函数的定义通俗点说就是:固定的输入,得到固定的输出,不受到来自外部的任何干扰

 纯函数不会随着执行次数的增加而改变输出的值,比如数组中的splice和slice,其中splice不是纯函数,而slice则为定义的纯函数,示例如下:

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

// 纯函数
xs.slice(0,3);
//=> [1,2,3]
xs.slice(0,3);
//=> [1,2,3]
xs.slice(0,3);
//=> [1,2,3]

// 不是纯函数
xs.splice(0,3);
//=> [1,2,3]
xs.splice(0,3);
//=> [4,5]
xs.splice(0,3);
//=> []

splice随着执行次数的增多,返回的值就出现了差异,这与纯函数的思想相背离。。。

至于不受到外部干扰的解释是,有的函数会在内部与外部的全局变量产生关联,是的函数的输出会根据外部值得变化发生改变,具体的例子如下:

// 不纯的
var minimum = 21;
var checkAge = function(age) {
return age >= minimum;
};

// 纯的
var checkAge = function(age) {
var minimum = 21;
return age >= minimum;
};

示例中不是存函数主要原因是函数内部会受到外部变量minmum的影响

追求纯函数的理由

  • 可缓存性

纯函数可以根据输入来缓存结果,可以加快程序重复执行时的运算速度,具体如何实现缓存,可以单独去了解下

var squareNumber = memoize(function(x){ return x*x; });
squareNumber(4);
//=> 16
squareNumber(4); // 从缓存中读取输入值为 4 的结果
//=> 16

可缓存性还有个好处就是可以将非纯函数,缓存为纯函数,即延迟执行

  • 可移植性

在js中可移植性意味着可以将函数序列化并通过socket发送。纯函数与环境无关,可以在任何地方运行

  • 可测试性

因为其其固定的输入与输出,使得测试会更加的简便

  • 并行代码

因为纯函数不需要访问共享内存,所以函数间也不会因为引用而进入竞争状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章