When should I store a function into a variable?
I default to the non-variable function onReq(){}
version. It's not a concious decision I've made, but thinking about it brings forth these arguments:
- It looks cleaner.
- It is conceptually simpler: it's just a function, while the other is a function and a variable. It's a small thing, but I find it valuable none the less.
- It assures me that
onReq
will always refer to that function body - one less thing to consider when reading the code. Sort of like marking a variable asfinal
in Java. - Keeps me from "accidentally" replacing the function, causing unintended side effects elsewhere.
Here is an explaination:
There is a distinction between the function name and the variable the function is assigned to:
- The function name cannot be changed, while the variable the function is assigned to can be reassigned.
- The function name can be used only within the function's body. Attempting to use it outside the function's body results in an error (or undefined if the function name was previously declared via a var statement).
https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope
Usually I'll only use a var funcName = function(){}
when I would need to redefine the action(s) for that function later on. For example:
var foo = function(a){ return a * 2; }
var bar = foo(2);
foo = function(a){ return a / 2; }
bar = foo(bar);
Otherwise, for most purposes (assuming it's not a callback or a modifier) declaring a function "classically" is usually acceptable.