博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js函数式编程
阅读量:6700 次
发布时间:2019-06-25

本文共 1978 字,大约阅读时间需要 6 分钟。

最近在看朴灵的《深入浅出nodejs》其中讲到函数式编程.理解记录下

  • 高阶函数

比较常见,即将函数作为参数,或是将函数作为返回值得函数.

如ECMAScript5中提供的一些数组方法 forEach() map() reduce() reduceRight() filter() every() some() 

  • 偏函数

说实话看到书,我是第一次看到这个概念,虽然应该是看到过这种用法,好桑感....定义也比较拗口

指创建一个调用另外一个部分---参数或变量已经预知的函数---的函数的用法.直白说就是:通过闭包来创建预先填写好的某些参数的函数."可以通过这个来创建动态名称的函数,看起来应该很牛B,代码可读性也更好"

写个例子

var joinwords  = function(first,sec){             return [first, sec].join(' ');         }                function suffix(a){          return function(b){             return joinwords(b,a);          }        }            var hello = suffix("world"); /*   function hello (b){     return [b,"world"].join();   } * */    console.log(hello("hello")); // hello world

 

 ----------------------------------------2014-02-11更新-----------------------------------------------------------------------

看了篇文章,,讲的挺好的,为加深印象,自己再整理理解下

柯里化(Currying)

柯里化是将一个多元函数分解为一系列嵌套调用的一元函数。分解后,你可以部分应用一个或多个参数。柯里化的过程不会向函数传递参数。

偏应用(Partial Application)

偏应用是为一个多元函数预先提供部分参数,从而在调用时可以省略这些参数。

 现在将上面的示例柯里化

function rightmostCurry (binaryFn) {  return function (secondArg) {    return function (firstArg) {      return binaryFn(firstArg, secondArg);    };  };};//调用var rightmostCurriedMap = rightmostCurry(joinwords),    squareAll = rightmostCurriedMap("world");console.log(rightmostCurry(joinwords)("Chan")("Nancy")); // Nancy Chanconsole.log(rightmostCurriedMap("July")("Hey")); // Hey Julyconsole.log(squareAll("hello")); // hello worldconsole.log(squareAll("hello2")); // hello2 world

(这篇文章讲到了,看得有点懵...)

When you find yourself calling the same function and passing mostly the same parameters, then the function is probably a good candidate for currying. You can create a new function dynamically by partially applying a set of arguments to your function. The new function will keep the repeated parameters stored (so you don't have to pass them every time) and will use them to pre-fill the full list of arguments that the original function expects.

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/kite-Runner/p/3543692.html

你可能感兴趣的文章
1106: 回文数(函数专题)
查看>>
【BZOJ 3339 / BZOJ 3585 / luogu 4137】Rmq Problem / mex
查看>>
【原创】Git删除暂存区或版本库中的文件
查看>>
【原创】注意析构函数的使用
查看>>
求 s=a+aa+ aaa+ aaaa +aaaaa+........的值,a是从键盘输入的,项数也为键盘输入
查看>>
java代码做repeat次运算,从键盘输入几个数,比最值
查看>>
Coursera机器学习笔记(一) - 监督学习vs无监督学习
查看>>
新人报道,写的东西还请大神们多指导!也希望能让和我一样的同事少走弯路。...
查看>>
C#中获取当前时间:System.DateTime.Now.ToString()用法
查看>>
TW实习日记:第16天
查看>>
【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)
查看>>
条件渲染vue
查看>>
数据库不完全恢复 以及恢复到测试环境:
查看>>
day 05 多行输出与多行注释、字符串的格式化输出、预设创建者和日期
查看>>
nodejs 实现文件拷贝
查看>>
laravel框架——composer导入laravel
查看>>
c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展
查看>>
MyEclipse/Eclipse 中使用javap
查看>>
docker registry v2与harbor的搭建
查看>>
求二叉树的高度
查看>>