Default Parameters
In JavaScript, default parameters allow you to initialize named parameters with default values if no value or undefined
is passed. This feature was introduced in ES6 (ECMAScript 2015) and helps in making your functions more robust and readable.
Syntax
The syntax for default parameters is straightforward. You simply assign a default value to the parameter directly in the function signature.
function greet(name = "Guest") {
return `Hello, ${name}!`;
}
console.log(greet()); // "Hello, Guest!"
console.log(greet("Hunter")); // "Hello, Hunter!"
Multiple Default Parameters
You can also have multiple default parameters in a single function. Each parameter can be assigned a default value.
function createUser(name = "Anonymous", age = 18, country = "Unknown") {
return `Name: ${name}, Age: ${age}, Country: ${country}`;
}
console.log(createUser()); // "Name: Anonymous, Age: 18, Country: Unknown"
console.log(createUser("Amy", 25, "USA")); // "Name: Amy, Age: 25, Country: USA"
Using Expressions as Default Values
Default values can also be the result of an expression, including function calls.
function getDefaultAge() {
return 21;
}
function createUser(name = "Anonymous", age = getDefaultAge()) {
return `Name: ${name}, Age: ${age}`;
}
console.log(createUser()); // "Name: Anonymous, Age: 21"
console.log(createUser("Bob", 30)); // "Name: Bob, Age: 30"
Interdependent Default Parameters
Default parameters can reference parameters that appear earlier in the parameter list.
function createMessage(name, greeting = `Hello, ${name}`) {
return greeting;
}
console.log(createMessage("Alice")); // "Hello, Alice"
console.log(createMessage("Bob", "Hi there!")); // "Hi there!"
Practical Examples
API Request Function
Consider an API request function where certain parameters have sensible defaults.
function fetchData(url, method = "GET", timeout = 5000) {
console.log(`Fetching data from ${url} with method ${method} and timeout ${timeout}`);
// Imagine an actual fetch request here
}
fetchData("https://api.example.com/data");
// Fetching data from https://api.example.com/data with method GET and timeout 5000
fetchData("https://api.example.com/data", "POST", 10000);
// Fetching data from https://api.example.com/data with method POST and timeout 10000
Event Handler
A function to add an event listener with default options.
function addClickListener(element, callback, useCapture = false) {
element.addEventListener("click", callback, useCapture);
}
const button = document.querySelector("button");
addClickListener(button, () => alert("Button clicked!"));
Common Errors and Best Practices
Avoid Overwriting Undefined Values
Be cautious of cases where undefined might be intentionally passed.
function process(value = 10) {
return value;
}
console.log(process()); // 10
console.log(process(undefined)); // 10
console.log(process(null)); // null (null is a valid value, not undefined)
Avoid Side Effects in Default Parameters
Default parameters should be free of side effects to avoid unexpected behaviors.
let counter = 0;
function increment(count = ++counter) {
return count;
}
console.log(increment()); // 1
console.log(increment()); // 2
console.log(increment(10)); // 10
console.log(increment()); // 3 (side effect, counter is incremented even if count is provided)
Notes
Default Parameters
were introduced in ES6 and allow for more flexible and robust function definitions.Undefined Values
are treated as missing parameters and default values are applied.Expressions as Defaults
can be useful but be cautious of side effects.Interdependent Parameters
can reference earlier parameters, allowing for more dynamic defaults.
FAQ
Q: Can default parameters be objects or arrays?
A: Yes, default parameters can be any valid JavaScript value, including objects and arrays.
Q: What happens if I pass undefined
to a function with a default parameter?
A: If undefined
is explicitly passed, the default value is used. If null
is passed, it is treated as a valid value and the default is not used.
Q: Are default parameters evaluated every time the function is called?
A: Yes, default parameters are evaluated at the time the function is called, not when the function is defined.