es6 nodejs compose
const compose = (...fns) => {
let len = fns.length;
let fn_index = len - 1;
let fn_result;
function invoke(...args) {
fn_result = len ? fns[fn_index].apply(this, args) : args[0]
if(fn_index <= 0){
fn_index = len - 1;
return fn_result;
}else{
fn_index--;
return invoke.call(null, fn_result);
}
}
return invoke;
}
const compose2 = (...fns) => {
const length = fns.length;
let index = length;
while(index--){
if(typeof(fns[index]) !== 'function'){
throw new TypeError(`fns ${index} not a function.`)
}
}
return (...args) => {
let index = 0;
let result = length ? fns[index].apply(this, args) : args[0]
while(++index < length) {
result = fns[index].call(this, result)
}
return result;
}
}
const compose2Right = (...fns) => {
return compose2.apply(null, fns.reverse())
}
const upperName = compose(str => str.toUpperCase(), (firstName, lastName) => firstName + ',' + lastName)
const name = upperName('flex', 'react')
console.log(name)
const upperName2 = compose2((firstName, lastName) => firstName + ',' + lastName, str => str.toUpperCase())
const name2 = upperName2('flex', 'react')
console.log(name2)
const upperName3 = compose2Right(str => str.toUpperCase(), (firstName, lastName) => firstName + ',' + lastName)
const name3 = upperName3('flex', 'react')
console.log(name3)
const upperName4 = compose2()
const name4 = upperName4('a','b')
console.log(name4)
const upperName5 = compose()
const name5 = upperName5('a','b')
console.log(name5)
es6 nodejs compose的更多相关文章
- 如何在NodeJS项目中优雅的使用ES6
如何在NodeJS项目中优雅的使用ES6 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性.只是在使用的时候需要在node后面加 ...
- NPM 与 Nodejs
安装了Nodejs之后,NPM也安装好了 如何知道当前是否已经安装Nodejs和NPM了呢? node -v //查看当前nodejs的版本 npm -v //查看当前npm的版本 NPM 初始化 n ...
- 前端面试题总结:HTML5,JS,CSS3,兼容性。
1. 请写出至少20个HTML5标签 <article><aside> <audio><video> <canvas><datalis ...
- Mac新手从入门到放弃MongoDB
1. 简介 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最 ...
- 编写JavaScript 代码的5个小技巧
1.Array.includes 与条件判断 一般我们判断或用 || // condition function test(fruit) { if (fruit == "apple" ...
- 2016年后web开发趋势是什么?
2016 年后 Web开发趋势是什么 来源:yafeilee.me 发布时间:2016-05-06 阅读次数:1378 3 近二年的进展 前端发展日新月异, 甚至有一句戏言: "每六星期 ...
- NuxtJS快速入门
服务器端渲染(SSR) 知识储备 ES6 Nodejs Vue React Angular 什么是服务器端渲染 前端渲染:html页面作为静态文件存在,前端请求时后端不对该文件做任何内容上的修改,直接 ...
- 让nodeJS支持ES6的词法----babel的安装和使用
要使用Babel, 我们需要nodeJS的环境和npm, 主要安装了nodeJS, npm就默认安装了 , 现在安装nodeJS很简单了, 直接下载安装就好了: 安装es-checker 在使用Bab ...
- 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)
请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...
随机推荐
- python全栈开发从入门到放弃之常用模块和正则
什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...
- 002-启动spring boot应用
一.idea启动. 1.在src目录里面找到启动类(包含主函数的类)DemoApplication,然后在该类里面右键,选择run DemoApplication.main,即spring boot应 ...
- 新一批创业者金矿,iclap谁与争锋
19世纪,美国西部开发,无数拓荒者涌入,并最终因金矿的发现形成了淘金热.而当无数人埋头寻找黄金之时,有一个人却抬起头看到了潜藏在无数淘金者身上的金矿-这个人就是牛仔裤的发明者,Levi’s的创始人-李 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (上下界网络流)
正解: #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN=1 ...
- 设置eclipse编码格式
1.修改eclipse默认工作空间编码方式.点击Window-->Preferences-->General-->Workspace,设置编码格式为UTF-8,然后点击OK.
- JVM 内存知识总结
本文主要参考内容: http://hllvm.group.iteye.com/group/wiki/3053-JVM http://my.oschina.net/xishuixixia/blog/13 ...
- 20145316《Java程序设计》实验二报告
20145316<Java程序设计>实验二报告 一.实验目的与要求 1.初步掌握单元测试和TDD. 2.理解并掌握面向对象三要素:封装.继承.多态. 3.初步掌握UML建模. 4.熟悉S. ...
- rz时提示command not found
-bash: rz: command not found rz命令没找到? 执行sz,同样也没找到. 安装lrzsz: # yum -y install lrzsz 现在就可以正常使用rz ...
- java语言基本环境搭建
从放假开始,就开始路陆陆续续了解关于java语言的学习.首先从语言编辑环境就和以前学习的c语言会有些不同,对java语言的学习也有了很大很多新的认识. 首先从官网上下载jdk,按照娄老师给我们的操作提 ...
- 关于JavaScript对象中的一切(一) -- 对象属性
先上一张我制作的脑图.