Default parameters allow you to initialize function parameters with default values if no value or undefined is passed.

Before ES6, you had to write:

function greet(name) {
name = name || "Guest";
console.log(`Hello, ${name}!`);
}
greet(); // Hello, Guest!
greet("Zaman"); // Hello, Zaman!

With ES6 default parameters, this becomes much cleaner:

function greet(name = "Guest") {
console.log(`Hello, ${name}!`);
}
greet(); // Hello, Guest!
greet("Zaman"); // Hello, Zaman!

1. Basic Syntax

function multiply(a = 1, b = 1) {
return a * b;
}
console.log(multiply()); // 1
console.log(multiply(5)); // 5
console.log(multiply(5, 2)); // 10

2. Default Parameters Can Be Expressions

You can use expressions as defaults:

function randomNumber(max = Math.floor(Math.random() * 100)) {
return max;
}
console.log(randomNumber()); // random number between 0-99
  • The expression is evaluated at call time.

3. Default Parameters Using Other Parameters

Parameters can reference previous parameters:

function createUser(name = "Guest", role = "User", welcomeMsg = `${name} is a ${role}`) {
console.log(welcomeMsg);
}
createUser(); // Guest is a User
createUser("Zaman"); // Zaman is a User
createUser("Zaman", "Admin"); // Zaman is a Admin

⚠️ Later parameters can reference earlier ones, but not vice versa.

function wrong(a = b, b = 1) { // ❌ Error
return a + b;
}

4. Default Parameters with Objects

Useful for options objects:

function connect({ host = "localhost", port = 80, secure = false } = {}) {
console.log(`Connecting to ${host}:${port}, secure=${secure}`);
}

connect();
// Connecting to localhost:80, secure=false
connect({ host: "example.com", secure: true });
// Connecting to example.com:80, secure=true
  • Notice the = {} after the destructured object: it allows calling connect() with no arguments.

5. Default Parameters with Arrays

function sum(numbers = [0]) {
return numbers.reduce((a, b) => a + b, 0);
}
console.log(sum()); // 0
console.log(sum([1,2,3])); // 6

6. Functions as Default Parameters

function greet(name = getDefaultName()) {
console.log(`Hello, ${name}!`);
}
function getDefaultName() {
return "Guest";
}

greet(); // Hello, Guest!
greet("Zaman"); // Hello, Zaman!
  • Default expressions can be functions that are only executed if the parameter is undefined.

7. Rest Parameters vs Default Parameters

Default parameters apply before rest parameters:

function show(a = 1, ...rest) {
console.log(a, rest);
}
show(); // 1 []
show(5); // 5 []
show(5, 10, 15); // 5 [10, 15]

8. Practical Use Cases

1. API functions

function fetchData(url, method = "GET", timeout = 5000) {
console.log(`${method} request to ${url} with timeout ${timeout}`);
}

2. Logging

function log(message, level = "INFO") {
  console.log(`[${level}] ${message}`);
}

3. Object destructuring defaults in parameters

function createUser({name = "Guest", age = 18} = {}) {
   console.log(name, age);
}
createUser(); // Guest 18
createUser({name: "Zaman"}); // Zaman 18

Categorized in:

Javascript ES6,