函数式编程1

概念

函数式编程是一种思想,一种编程范式,需要多写才能体会。

特性

纯函数

相同的输入 肯定得到相同的输出 不依赖外部状态

var arr = [ 1, 2, 3, 4, 5 ]
arr.slice( 0, 3 ) //[0,1,2]
arr.slice( 0, 3 ) //[0,1,2]
var arr1 = [ 1, 2, 3, 4, 5 ]
arr1.push( 1 ); //6   push方法 向数组末尾添加一个元素,并返回新的长度
arr1.push( 1 ); //7
//slice 方法 相同的输入总是得到相同的输出  是纯函数  相反 push不是纯函数

柯里化

传递给函数比部分参数调用他 返回值去处理剩下的参数,每次只能输入一个参数

//柯里化  刚开始传递一部分参数调用函数(checkage(18))  然后让其在返回一个新的函数(checkage18)去处理剩下的参数(checkage18(20))  
var cheakage = min => ( age => age => min )
var checkage = function ( min ) {
    return function ( age ) {
        return min > age;
    }
}
var checkage18 = checkage( 18 ); //产生了闭包 实质
checkage18( 20 ) //返回值 false

函数组合

一个值经过多个函数编程另外一个值 可以把中间的函数合并为一个函数 解决函数嵌套的问题

///函数组合  柯里化 每次传入一个参数  当参数越来越多 里面嵌套函数 越来越多. 解决函数嵌套的问题
var compose  = function(f,g){
    return function(x){
        f(g(x))
    }
}

惰性求值

function getName(){
    var a = 1;
    console.log(22)
    getName = function(){
        console.log(2222)
        return a;
    }
    return a;
}
console.log(getName)//1
console.log(getName)//1
//具体请看js的执行过程

高阶函数

函数当做参数 把传入的函数作为一个封装,然后返回封装函数 达到更高层次的抽象

function add(a,b){
    return a+b;
}

function sum(add,array){
    return add(array[0],array[1]);
}

sum(add,[1,2])

尾调用优化

递归需要保存大量的调用记录,容易发生栈溢出错误,尾递归将递归变为循环只需要保存一个调用记录,不会发生溢出内存的错误。
具体作用优点可以参考阮一峰es6 函数拓展

//尾调用优化  最为显著的是尾递归

function factorial(n,total){
    if(n===1) {
        return n+total

    }else {
        return factorial(n-1,n+total);
    }
}
console.log(factorial(5,0));

闭包

函数式编程几乎都涉及闭包,函数在自身定义所在的作用域位置以外执行就形成闭包。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接:https://github.com/EasyKotlin 值就是函数,函数就是值。所有函数都消费函数,...
    JackChen1024阅读 6,067评论 1 17
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 484评论 0 0
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,860评论 2 9
  • 今天开始读罗胖老师的我懂你的知识焦虑,第一章第一节是泉灵老师写的,这个楔子并不突兀。泉灵老师和罗胖老师是...
    弹吉他的键盘手阅读 177评论 0 1
  • 断层你披星戴月我不辞风雪赴一场聚会,在距离生活很遥远的地方故乡渐行渐远,一路追赶的双脚终会疲惫是时候封存起完整的自...
    张生生阅读 183评论 0 0