分类信息网站制作,wordpress主题开发实例,开平网络推广,wordpress手机滑动导航菜单参考链接#xff1a; 用示例编写Java柯里化Currying函数
文章目录 纯函数什么是纯函数纯函数例子非纯函数例子 函数柯里化函数柯里化简单例子参数复用 纯函数
什么是纯函数 如果函数的调用参数相同#xff0c;则永远返回相同的结果。它不依赖于程序执行期间函数外部任何状…参考链接 用示例编写Java柯里化Currying函数
文章目录 纯函数什么是纯函数纯函数例子非纯函数例子 函数柯里化函数柯里化简单例子参数复用 纯函数
什么是纯函数 如果函数的调用参数相同则永远返回相同的结果。它不依赖于程序执行期间函数外部任何状态或数据的变化必须只依赖于其输入参数。 该函数不会产生任何可观察的副作用例如网络请求输入和输出设备或数据突变mutation。 这就是纯的函数。 如果一个函数符合上述 2 个要求它就是纯函数。 你可能在过去甚至无意地情况下编写过纯函数。
纯函数例子
function getSum(num) { return num * 2 num
} 它符合我们所说的两条纯函数的定义。不依赖于任何外部输入不改变任何外部数据、没有副作用。 即使你用同样的输入运行运行这个函数 100,000,000 次它依旧产生同样的结果。
非纯函数例子
let num 10;
function getSum(num2) { return num num2
} 在这里函数的计算结果取决于外部num变量而非函数不能依赖外部任何变量所以它就是非纯函数
函数柯里化 把接受多个参数的函数变换成接受一个单一参数最初函数的第一个参数的函数并且返回接受余下的参数而且返回结果的新函数的技术。 函数柯里化简单例子
// 普通的add函数
function add(x, y) { return x y
} // Currying后
function curryingAdd(x) { return function (y) { return x y }
} add(1, 2) // 3
curryingAdd(1)(2) // 3 参数复用
// 正常正则验证字符串 reg.test(txt) // 函数封装后
function check(reg, txt) { return reg.test(txt)
} check(/\d/g, test) //false
check(/[a-z]/g, test) //true // Currying后
function curryingCheck(reg) { return function(txt) { return reg.test(txt) }
} var hasNumber curryingCheck(/\d/g)
var hasLetter curryingCheck(/[a-z]/g) hasNumber(test1) // true
hasNumber(testtest) // false
hasLetter(21212) // false 上面的示例是一个正则的校验正常来说直接调用check函数就可以了但是如果我有很多地方都要校验是否有数字其实就是需要将第一个参数reg进行复用这样别的地方就能够直接调用hasNumberhasLetter等函数让参数能够复用调用起来也更方便。