In my opinion learning about the different function types, and we could throw in 'higher order functions' and 'recursive functions' to the list, is just the tip of the iceberg.
Look at almost any JS book or online course and there will be lengthy chapters/sections dedicated to functions. It's something that can be over-whelming to start with, and will take time, research and practice to try and grasp — Its all well worth the effort though.
If I think back a decade ago, and my efforts to wrap my head around JS functions, there are a few key things worth learning about.
- Function invocation in general and the processes/steps involved in that. (see link below)
- What the Execution context is
- Arguments, the scope chain and lexical scoping
- Garbage collection and 'closures'
- The difference between arguments being passed as values or by reference — This definitely threw me to begin with.
- Finally understanding that functions are basically executable objects (first class objects) that can be passed around and treated like any other piece of data.
https://blog.bitsrc.io/understanding-execution-context-and-execution-stack-in-javascript-1c9ea8642dd0
Personally I think with a good grounding in these topics, understanding different ways of creating and using functions will fall into place.
Just to add this was a link that helped me back then. Have to say it's pretty dry reading though.
http://jibbering.com/faq/faq_notes/closures.html