DEV Community

M. Brian Dunson
M. Brian Dunson

Posted on

1 1

Help me understand this code, please

I'm working through 'Eloquent Javascript' (www.eloquentjavascript.net) and I'm not grasping how this works.

function multiplier(factor) {
  return number => number * factor;
}
let twice = multiplier(2);
console.log(twice(5));
// → 10
Enter fullscreen mode Exit fullscreen mode

I guess where I'm getting lost is how does this line worK:
let twice = multiplier(2)

In trying to understand, I did some other console.log commands to see what they would return:

console.log(multiplier(2));
// → x => x * factor
console.log(twice);
// → x => x * factor
Enter fullscreen mode Exit fullscreen mode

Can someone help me get over this mental block that I'm having? How does 'twice' have a parameter? Is 'twice' a reference to the multiplier function?

Top comments (2)

Collapse
 
bolt04 profile image
David Pereira • Edited

twice has a parameter because it's a function. The reason it's a function is because the multiplier function returns a function (on that code snippet you use the lamdba function syntax). In JS this is possible because functions are first-class citizens.
Also, twice is not a reference to the multiplier function. You create a new function when you return, so it's a reference to a new function. Every time you call multiplier, you create a new function.
Hope that helped ☺

Collapse
 
mbdunson profile image
M. Brian Dunson

Ok, so what I was missing is:
return x => x * factor;

is the same as:
return function(x) { return x * factor; };

Thank you for your excellent explanation!

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post