Hi everyone! After a long gap I was refreshing my JavaScript understanding and went through many blogs and videos. JavaScript is like a magic you will never be able to understand it as whole. JavaScript as a base language do support many front end and back end libraries and framework. JavaScript is no more just a scripting language.
Today I am going to discuss about one of the most asked interview topic. Currying
Trust me until now I have given a lots of interviews and this was asked to me in almost all interviews.
But to start with currying we need pre requisite knowledge of closures. To know more about closures you can read my blog on closures where I have demonstrated closures and it's usecase in more detail.
Currying
Currying is based on the concept of closures where a function of type f(a,b,c) is converted to f(a)(b)(c). Currying simply means evaluating function with multiple arguments and decomposing it into sequence of multiple functions with single argument. In other term a function is called by passing a argument which returns a new function accepting an argument and that in turn returns a new function accepting an argument and so on.
This could be rewritten using currying as follows.
Here add function becomes outer function for a function accepting b has an argument which in turn becomes outer function for a function accepting c has an argument. In term add function becomes a closure to encapsulated function limiting its scope only to the enclosed function.
Advanced example
And the function can be used as
Closure and Partial application
Closures are formed by nesting functions but at what level? Does it depends upon number of arguments passed to a function? What if it doesn't.
Here only one function is nested although three arguments are passed and only one argument is decomposed.
No it doesn't form closure it forms partial application although they look similar but in closure the functions nested will depend on number of arguments passed to function. Partial application simply decompose a function into another function with smaller arguments.
Application / Use-case
- Currying can be used to manipulate DOM in JavaScript.
- It is used to trigger event listener.
- In a functional programming currying is used to achieve higher order functions.
Reference
https://javascript.info/currying-partials
That's all for today until then Happy Coding!...
Top comments (10)
I wonder about the point of copying code from "Javascript.info" and posting it here.
Wouldn't it be enough to post the link...
Thanks for suggesting, I will add it in reference
What happened in the 'application' section? π€
It's use cases where we can apply currying
Really? OK, I'll bite... please give examples of using currying to:
You can check this codepen example for manipulating dom codepen.io/emilsone/pen/jOwNgde
and in react where you attach a event handler onclick event to work as
const handleClick = (value)=>{
return (e)=>{
setValue({[value]: e.currentTarget.value }
}
}
You can also use it to create a function which will accept a event and the element as argument and will be used to add event listener or remove event listener
function on(type, element){
element.addListener(type, ()=>alert("clicked"));
return (a)=>element.removeListener(type,(a)=>alert("element removed"+a));
}
Currying isn't manipulating the DOM, nor is it triggering an event listener. Currying is merely a process to convert a function that takes multiple arguments into a sequence of functions that each takes a single argument.
Yes right currying is a process to convert a function with multiple arguments to multiple functions with single argument. Currying is used to manipulate the DOM and triggering an event listener. So this are "use-cases/scenarios" where you can use currying. That's the reason I have written them in "application" section and not in the "examples" section.
Thanks for reading my blog I will definitely share a blog to discuss currying use-cases/scenarios.
It seems we're fighting a language battle that is going round in circles
Very well, I got what you want to say but I have used currying in the following scenario and I feel mentioning them so that reader get an idea where they can apply it.
Some comments have been hidden by the post's author - find out more