1. Arrow functions provide a concise syntax for defining anonymous functions and avoiding issues with binding 'this'. 2. They are best used for list processing and anonymous callback functions. 3. Arrow functions lexically bind 'this' from the enclosing context and cannot be used as constructors or contain yield expressions. 4. When a function requires a constructor, generator, changing 'this' binding, or needs arguments - a regular function expression is better.