JS Named Parameters

Let me start with an apology for the title, which is a bit inaccurate. There are no native named parameters in Javascript.

Having said that, using ES6 awesome destructuring we can enact named parameters.

Now before demonstrating exactly how, I want to give two use cases where it can come in handy.

  • The first scenario is when we have complex function calls, with several arguments in different types. This makes the call less readable therefore more bug-prone (missing parameter, wrong order and more).

  • The second is when dealing with a promise. You can define explicitly what you’re expecting to receive and even set up default values.

Usage

Before a function is executed all arguments passed are assigned to parameters based on its’ signature. That means object destructuring will perfectly here.

Instead of:

const myFunc = (organizationId, name, force, verbose) => {
  ...
}

// not the most readable function call somewhere in your code
myFunc(17, 'Test', true, false)

You can do this:

const myFunc = ({ organizationId, name, force, verbose }) => {
  ...
}

// not the most readable function call somewhere in your code
myFunc({ organizationId: 17, name: 'Test', force: true, verbose: false })

Say my name gif

The important thing to remember is that destructuring is based on same property name. The order does not matter.

Pro Tips

  • Like regular destructuring, you can also rename the parameters during the assignment:
// renamed name to orgName
const myFunc = ({ orgId, name: orgName , force, verbose }) => {
  console.log(orgName); // 'Test'
}

myFunc({ orgId: 17, name: 'Test', force: true, verbose: false)
  • We can have default values and optional parameters
const myOtherFunc = ({ x = 1, y = 2, z = 3 } = {}) => {
  console.log(x, y, z); 
}

// x isn't passed thus received its default value
myOtherFunc({ y: 5, z: 10}) // 1 5 10
comments powered by Disqus