# BFE.dev | 1. implement curry() | JavaScript Problem Solving

Hello friends, in this article I'm going to discuss and walk through my thought process of solving the `Implement curry()` problem on BFE.dev.

[problem link](https://bigfrontend.dev/problem/implement-curry) 

### Here's the question.

`Q. Currying is a useful technique used in JavaScript applications. Please implement a curry() function, which accepts a function and return a curried one. Here is an example`

```js

const join = (a, b, c) => {
   return `${a}_${b}_${c}`
}

const curriedJoin = curry(join)

curriedJoin(1, 2, 3) // '1_2_3'

curriedJoin(1)(2, 3) // '1_2_3'

curriedJoin(1, 2)(3) // '1_2_3'

```

### Here's the Solution:

```js

/**
 * @param { (...args: any[]) => any } fn
 * @returns { (...args: any[]) => any }
 */

function curry(fn) {

  return function curried(...args){
     // Check if the `fn` passed have enough args or not

    if(args.length >= fn.length){
     // If there are enough args call the `fn` with the `args`

      return fn.apply(this, args)
    } 
   else{

    // Else bind the function with the remaining args and recursively return it.
        return curried.bind(this, ...args)
    }
  }
}

```

### Conclusion

Thanks for going through the problem, I'll be adding more problems in the blog as I continue to practice, feel free to like, share & comment your feedback.
