JavaScript 函数式编程理解笔记 (1)

本笔记经过学习
https://www.ibm.com/developerworks/cn/web/1006_qiujt_jsfunctional/ 后书写,很大部分都相同,但一字一句包括代码都是自己书写。

JavaScript 函数式编程理解笔记 (1)

函数式编程语言特性

      在函数式编程中,函数式第一类的对象,也就是说,它不依赖于其他任何对象而可以独立存在,但是在面向对象的语言中,函数是依附于对象的,是对象的一部分。

函数式编程的专用概念

1.匿名函数
      在函数式编程中,函数是可以没有名字的。有时为了完成某些事而编写这个函数,但是由于这个函数只是临时性的,所以就没有理由去生成一个顶层的函数对象。如:

function map(array,func){
    var res = [];
    for(var i = 0; i < array.length; i++){
        res.push(func(array[i]));
    }
    return res;
}
var mapped = map([1,3,5,7,9],function(n){
    return n = n + 1;
});
print(mapped);
运行这段代码,会打印:
2,4,6,8,10//数组[1,3,5,7,9]中的每一个元素加1

map中的第二个参数其实就是匿名函数,它对于map函数的第一个参数来说是有作用的,但是对于map函数外的代码,其实是没有作用的,所以只需要匿名即可。

2.柯里化
      柯里化是把接受多个参数的函数变成接受一个单一参数的函数,并且返回接受余下的参数而且返回结果的新函数。如:

function curring(num){
    return function(x){
        return num + x;
    }
}
var add5 = curring(5);
var add6 = curring(6);
print(add5(1));
print(add6(1));

//结果为:
//6
//7

      要注意的是,curring函数接受一个参数,并返回一个函数,这个函数可以像预期那样被调用。而两个变量add5、add6可以保持curring()返回的函数,而这个函数可以接受一个参数,从而返回代码中的 num + x 的值。

3.高阶函数
      上文匿名函数中的map函数即是一种高阶函数。map(array,func)已经表明:将func作用于array中的每一个元素,最终返回一个新的array。而map对于array和func的实现是没有预先的假设的,所以这种函数被称为“高阶函数”:

fucntion map = (array,func){
    var res = [];
    for(var i = 0; i < array.length; i++){
        res.push(func(array[i]));
    }
    return res;
}
var mapped = map([1,3,5,7,9],function(n){
    return n += 1;
});
print(mapped); //2,4,6,8,10

var mapped1 =map(["one","two","three","four"],
function(n){
    return "("+n+")";
});
print(mapped1); //(one),(two),(three),(four)

      mapped和mapped1都调用了map函数,但是结果不同,是因为map参数本身的已经进行了一次抽象,而map函数进行了第二次抽象。高阶的“阶”可以理解为抽象的层次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值