美文网首页
箭头函数例子

箭头函数例子

作者: 千若逸 | 来源:发表于2018-03-21 17:12 被阅读22次
const pipeline = (...funcs) =>
  val => funcs.reduce((a, b) => b(a), val)

const plus1 = a => a + 1
const mult2 = a => a * 2
const addThenMult = pipeline(plus1, mult2)

let r = addThenMult(5)
console.log(r)

看上去很简单的代码,但是结果却不是一眼能看得出来的。
真是写起来很简洁,读起来火葬场啊。

解析:
plus1和mult2都比较好理解,难点是pipeline这里。首先它是一个匿名函数,入参是多个函数组成的函数参数数组,返回的是 val => funcs.reduce((a, b) => b(a), val)这个匿名函数,代码中把这个匿名函数赋给了addThenMult,那么调用addThenMult时的传参5就对应val.

funcs.reduce((a, b) => b(a), val) 中的b(a)刚开始很让人疑惑,funcs是函数数组,给人的错觉是a和b都是函数,那么b(a)是函数嵌套?没见过这种写法啊。
其实并不是,如果你注意到reduce函数的第二个参数,就知道它是初始值,所以第一次循环时a是初始值val,b是函数plus1,运算结果是plus1(val),第二次循环时,a的值就变成了plus1(val),b函数是mult2,结果就是mul2(plus1(val))——最终实现的还是函数嵌套效果。

所以addThenMult(5)就等效于mul2(plus1(5))=(5+1)*2=12。

在WebStorm里对上面的代码进行ES6 to ES5转换,转换后的代码是:

"use strict";

var pipeline = function pipeline() {
    for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
        funcs[_key] = arguments[_key];
    }

    return function (val) {
        return funcs.reduce(function (a, b) {
            return b(a);
        }, val);
    };
};

var plus1 = function plus1(a) {
    return a + 1;
};
var mult2 = function mult2(a) {
    return a * 2;
};
var addThenMult = pipeline(plus1, mult2);

var r = addThenMult(5);
//# sourceMappingURL=test.js.map

你能看到结果是12吗?

换成Java的写法就是:

Function<Stream<Function<Integer, Integer>>, Function<Integer, Integer>>
  pipline = funcs -> val -> funcs.reduce((a, b) -> b.compose(a)).get().apply(val);

Function<Integer, Integer> plus1 = a -> a + 1;
Function<Integer, Integer> mult2 = a -> a * 2;
Function<Integer, Integer> addThenMult = pipline.apply(Stream.of(plus1, mult2));

Integer r = addThenMult.apply(5);

参考:

相关文章

  • 箭头函数例子

    看上去很简单的代码,但是结果却不是一眼能看得出来的。真是写起来很简洁,读起来火葬场啊。 解析:plus1和mult...

  • es6 箭头函数的this指向

    箭头函数在创建时确定了this指向。 下方例子中,箭头函数创建时this指向window,调用时也就指向了window

  • JS中的this指向

    首先来看一个例子: 首先只有在函数中才存在this指向问题1、箭头函数,this是包裹箭头函数的那个函数的this...

  • es6箭头函数

    es6新增了箭头函数, 先来看一个以前的例子 使用了箭头函数 如果是上面这样还可以简写为 this指向问题 箭头函...

  • 箭头使用箭头函数,不过以下几种情况避免使用:

    使用箭头函数定义对象的方法 定义原型方法 作为事件的回调函数 例子

  • Vue中的watch监听、computed计算属性、filter

    记录我在使用watch时常用的方法 1、watch监听 注意:ES6中推出了箭头函数,上述例子未使用箭头函数,如果...

  • ES6~箭头函数

    什么是箭头函数 单表达式箭头函数 相当于 多表达式箭头函数 箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有...

  • 箭头函数和立即执行函数

    箭头函数 箭头函数和普通函数有什么区别?如果把箭头函数转换为不用箭头函数的形式,如何转换主要是this的差别,箭头...

  • 学习 ES 6 箭头函数

    箭头函数的用法 ES6 允许使用“箭头”(=>)定义函数。 箭头函数的一个用处是简化回调函数。 箭头函数 this...

  • 箭头函数

    箭头函数 箭头函数能让this的指向固定化 分析:1)第一个setInterval()中使用了箭头函数,箭头函数使...

网友评论

      本文标题:箭头函数例子

      本文链接:https://www.haomeiwen.com/subject/cvogqftx.html