W3docs

JavaScript Arrow Functions Basics

Learn JavaScript arrow functions: concise ES6 syntax, implicit returns, multiple parameters, returning objects, and scope inheritance.

Introduction to Arrow Functions

Arrow functions, introduced in ES6 (ECMAScript 2015), are a concise way to write function expressions in JavaScript. They are especially useful for short functions and are used everywhere in modern JavaScript libraries and applications — particularly as callbacks passed to array methods, timers, and event handlers.

An arrow function is more than just a shorter syntax. It also behaves differently from a regular function in one important way: it does not create its own this. This page covers the syntax and that this behavior; for advanced edge cases (no arguments, no new, generators), see Arrow functions, revisited.

Basic Syntax

The general form of an arrow function is:

let functionName = (param1, param2, ..., paramN) => expression;

This creates a function that takes param1, param2, ..., paramN as parameters and returns the result of expression. The => token is read as "goes to" or simply "arrow".

The equivalent traditional function expression looks like this — comparing the two side by side shows what arrow syntax leaves out:

javascript— editable

The arrow version drops the function keyword, the curly braces, and the explicit return. The result is the same.

Single-line Arrow Functions (Implicit Return)

When the body is a single expression, you can omit the braces and the return keyword. The value of the expression is returned automatically — this is called an implicit return:

javascript— editable

Multi-line Arrow Functions (Explicit Return)

If the body needs more than one statement, wrap it in curly braces {}. Once you use braces, the implicit return is gone, so you must write return yourself if you want to return a value:

javascript— editable

Forgetting the return inside braces is a common beginner mistake: the function then returns undefined.

Parentheses Rules

The parentheses around parameters follow simple rules:

  • One parameter: parentheses are optional — x => x * 2.
  • Zero parameters: empty parentheses are required — () => 42.
  • Two or more parameters: parentheses are required — (a, b) => a + b.
javascript— editable

Returning an Object Literal

To return an object with the implicit-return syntax, wrap the object in parentheses. Without them, JavaScript reads the { as the start of a function body, not an object literal — so the function body just runs and returns undefined:

javascript— editable

Advantages of Arrow Functions

  1. Conciseness — Arrow functions have a shorter syntax compared to traditional function expressions, which keeps callbacks readable.
  2. Lexical this — Arrow functions do not have their own this. They take this from the surrounding (parent) scope, which removes a whole class of bugs around losing this in callbacks.
  3. Implicit returns — With the single-line syntax the return is automatic, making short transformations cleaner.

How this Works in Arrow Functions

This is the most important difference between arrow and regular functions. A regular function gets its own this, decided by how it is called. An arrow function has no this of its own — it looks up this from the scope where it was defined. This is known as lexical this.

The classic problem appears inside a method that schedules a callback. With a regular function, the callback's this is lost; with an arrow function, this is inherited:

javascript— editable

Because the arrow function captures this from startArrow (where this is the counter object), it correctly reads this.value. The regular function inside setTimeout is called with no object context, so its this.value is undefined. For a deeper look at how this is decided in regular methods, see Object methods, "this".

Limitations of Arrow Functions

Arrow functions are not a drop-in replacement for every function. Their lexical this is exactly what makes them unsuitable in some places.

  1. Not ideal as object methods — Because an arrow function inherits this from the surrounding scope instead of the object it is called on, using one as a method usually does not do what you want.
  2. Cannot be constructors — Arrow functions cannot be used with new and throw an error if you try; they are not constructors.
  3. No own arguments object — Inside an arrow function, arguments refers to the outer scope's, not the arguments passed to the arrow itself. Use rest parameters (...args) instead.

The method pitfall in practice — this does not point to the object:

javascript— editable

When to Use Which

  • Reach for an arrow function for short callbacks: array methods, promises, timers, and event handlers where you want to keep the surrounding this.
  • Reach for a regular function when you need a method that uses this to refer to its own object, a constructor, or access to the arguments object.

Practical Examples

Array Methods

Arrow functions shine with array methods like map, filter, and reduce, where each call is a tiny transformation:

javascript— editable

Event Listeners

Arrow functions are convenient for event listeners, especially inside a class or object where you want this to stay pointing at the surrounding instance (this example uses the browser, so run it in a page rather than the console):

document.getElementById("myButton").addEventListener("click", () => {
  console.log("Button clicked!");
});

Callbacks and Promises

They keep asynchronous code compact when used as callbacks:

javascript— editable

Conclusion

Arrow functions are a versatile, everyday feature of modern JavaScript. They provide a concise syntax, support implicit returns for one-line bodies, and — most importantly — inherit this from the surrounding scope, which avoids common context bugs in callbacks. They are ideal for array methods, promises, and event handlers, but not for object methods that rely on their own this, constructors, or code that needs the arguments object. Knowing when each kind of function fits is the key to using them well. Continue with Arrow functions, revisited for the remaining edge cases.

Practice

Practice
What are some characteristics of Arrow Functions in JavaScript?
What are some characteristics of Arrow Functions in JavaScript?
Was this page helpful?