Arrow functions simplify the syntax of our traditional functions.

They use symbols that make intuitive sense to help make our functions simpler.

The old way of writing functions:

const add = function(a, b){
    return a + b;
}

With arrow functions, we can remove the function key word, and add an arrow comprised of = and >.

const add = (a, b) => {
    return a + b;
}

Cool, our function is already simpler. This syntax makes sense. It's like saying "I'm going to take a and b and transform them." Right? And arrow suggests transportation, transformation, forwarding, moving, etc. "I'm going to take a and b and 'arrow' them."

But wait, there's more!!

We can simplify it some more. If your function has a single expression. Or a single line of code in the function, you can remove the curly brackets and return keyword

const add = (a, b) => a + b;

This is called an implicit return.

The rule is, if you have a just one expression in your function, remove both the curly brackets and the return keyword.

If you only have one argument, you can also drop the parentheses!

const double = (num) => num * 2;

can be written:

const double = num => num * 2;

If there are zero arguments, you need the parentheses.

const logHello = () => console.log("hello");

Arrow functions start to look especially sexy when used as anonymous callback functions.

const numbers = [1, 2, 3]

numbers.map(function(number) {
    return 2 * number;
});

can be:

const numbers = [1, 2, 3]

numbers.map(number => 2 * number);

This is possible because we are using arrow functions and .map() instead of a for loop.