javaScript函数柯里化

103 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情 原文链接:Aman Jain 本文主要介绍JavaScript中的一种函数时编程方法--函数柯里化 在正式开始之前,我们先来看一下下面的例子:


function x (a , b , c){
  let result = a + b + c ;
  return result ;
}
console.log(x(1 , 2 , 3))  // 6

上面的函数,看上去没有任何问题,我们下面换一种代码方式来重构它!

function fn1(a){
  return function fn2(b) {
    return function fn3(c) {
      let result = a + b + c;
      return result;
} } }

let resultOfA = fn1(1) ;
let result = resultOfA(2);
console.log(result(3))    // 6

上面的例子演示的就是函数柯里化,相信通过这里例子,隐隐约约有些理解了!如果没有,没关系,接下来我们来通过更多的示例来学习它!

什么是柯里化

函数柯里化是将JavaScript中有多个参数的函数重构成只有单个参数的函数的技术! 换句话说:当一个函数不是一次性接受所有参数,而是接受第一个参数并返回新函数,新函数接受第二个参数并返回新新函数!以此类推,知道所有参数都可以处理,这就成为函数柯里化!

优点

函数柯里化的好处是:当我们需要使用一些相同的参数调用相同的函数时,这里可以想象这样一个场景:假设我们要计算很多个高度长度相同但是宽度不同的长方体的体积,我们通过函数柯里化,只需要改变宽度就可以了! 在这种情况下,柯里化成为一种很好的技术!因为他们的代码很容易重构!同时函数柯里化有助于创建更高阶的函数。

如何在程序中使用

函数柯里化可以使用闭包或者javaScript中的bind方法来实现。 让我们使用这两种方式来实现函数柯里化

使用bind()方法

bind()返回要作用其函数的原始函数的副本,他接受两个参数,第一个是要引用的对象引用,第二个是都好分隔的参数列表!


function fn1(a){
  return function fn2(b) {
    return function fn3(c) {
      let result = a + b + c;
      return result;
} } }

let resultOfA = fn1(1) ;
let result = resultOfA(2);
console.log(result(3))    // 6

使用闭包



let multiply = (x,y) => {
  return x*y ;
 }

/* With the help of function closure we can convert it to the below function 
syntax as */

let multiply = (x) => {
    return function (y) {
        console.log(x * y);
    }
}

/* Because when the function is returned from multiply it will remember the value of x in its lexical scope using Function Closure, we 
can use it as  */

let multiplyByTwo = multiply(2);
multiplyByTwo(4)   //  8

let multiplyByTen = multiply(10);
multiplyByTen(4)   //  40