目录
1、正常函数封装
-
- 1、正常函数封装
- 2、Currying 后
function check(reg, txt) { return reg.test(txt); }; check(/\d+/g, 'test'); // false check(/[a-z]+/g, 'test'); // true
缺点:每次调用都要多传一个参数
2、Currying 后function curryingCheck(reg) { // 使用闭包机制保存 reg 值 // 形成多个执行上下文 // 通过外部调用的引用,使其作用域无法释放 return function(txt) { return reg.test(txt); }; }; // 使用变量接收外部函数返回的内部函数 // 在调用外部函数的时候传递参数,并且参数会保存在闭包中 // 当调用内部函数时会通过作用域链机制找到外层函数保存的变量 let hasNumber = curryingCheck(/\d+/g); let hasLetter = curryingCheck(/[a-z]+/g); // 此时调用的是返回的内部函数 hasNumber('test1'); // true hasNumber('testtest'); // false hasLetter('21212'); // false
示例是一个正则的校验,正常来说直接调用 check 函数就可以,但是如果有很多地方都要校验是否有数字,其实就是需要将第一个参数 reg 进行复用,这样别的地方就能够直接调用 hasNumber,hasLetter 等函数,让参数能够复用,调用起来也更方便。