ES6 introduced into JavaScript the extremely useful syntax for defining functions known as arrow functions. This refers to the notation:
argument => result
Arrow function notation can be used for both named and unnamed (anonymous) functions. Arrow functions allow for very compact definitions.
Example: define the successor function:
const f = ( x => x + 1 )
The parentheses around the function can be dropped:
const f = x => x + 1
It is slightly unclear when seen for the first time but soon becomes very natural.
Note that the above does not require a return; the expression on the right hand side of the arrow is the returned value.
If more than one statement is needed to define the function, braces must be introduced. The above example can also be written as:
const f = x => { const result = x + 1 return result }
Note that the following is problematic:
const f = x => { x + 1 } // does not return
This is very important: if braces are used, a return statement is necessary.
In short, if braces are present, a return statement is needed; if more than one statement is used in the function, braces must be used.
Another valid form:
const f = x => { return x + 1 }
The argument list can be made explicit with parentheses:
const f = (x) => { return x + 1 }
This is required for functions of multiple arguments, as in the following example:
const sum = (x, y) => x + y
The parentheses around the argument list cannot be dropped in this case.
A function with zero arguments also requires the parentheses around the (empty) argument list as follows:
const f = () => value