There are two goals:
Recursion: is a way to enable function expressions are recursive. The defined name for these functions is only available within themselves, and can be used for recursive calls. Anonymous function expressions do not allow recursion.
Debugging: In the most commonly used JS debuggers, these functions are identified by the name in the call stack rather than as anonymous function . This helps you better see which snippet of code is running.
The article quoted by TobyMosque, Named function expressions demystified is the great reference on the subject . However, it is already somewhat outdated, and I believe that the compatibility issues it points out do not apply to modern browsers anymore (IE, 10+ versions, maybe 9). It pays to read the article link for more details, it's really great (as well as others from the same author, such as Understanding delete ).