Aside from reading docs and tutorials (there is good resources down below in the others comments already).
Let's try to explain it simply : the arrow functions are so to say a shortcut to write functions more efficiently and make them more simple to read, making the code less overcharged.
function example(params ...) {}
const example = (params ...) => {}
Those two ways of writing functions are doing the exact same thing, but you're gonna tell me : "It's not much shorter is it ?"
That's because arrow functions have been made for more "on the go" usages. Most of their strength come from the fact that you can abstract some of the function keywords when using an arrow function.
If you want your function to return something they take in parameter for example, here is the 3 ways you can write that :
function getFirstElem(array) {
return array[0];
}
const getFirstElem = array => {
return array[0];
}
const getFirstElem = array => array[0]
Beginning to see the interest ? When your function is a pure function (which means there is no side effects, the return value is only based on the input of the function. Check-out functional programming here), you can skip the curly braces and just write your return value (or with parentheses if you need to wrap some operations together or return an object for example).
You can also (which is not as important) skip the parentheses around the parameters when there is only one of them.
Pretty much all the time ? Technically you can write all your code with arrow functions if it is your wish, depends on what norms you setup for your code. As I said earlier, they come in particularly handy in case you want to write pure functions !
Hope it make your mind a bit clearer about those lovely functions !