The variable declaration is hoisted to the top, then is assigned a named function expression `func` so that `func.name === 'func'`.
Useful for proper error messages and stack traces.
Something else I'm missing?
Something else I'm missing?
var func = function func() { /* blah */ };
Instead of B) function func() { /* blah */ }; var func = _.memoize(function private_non_memoized_func() {
func(); // "light"
private_non_memoized_func(); // "heavy"
}); if (addition) {
// operation = add
}
else {
// operation = subtract
}
If you use function declarations you might run into bugs if (addition) {
function operation (a, b) { return a + b; }
}
else {
function operation (a, b) { return a - b; }
}
console.log(operation(1,2));
Here it might happen that you don't get the expected function.Additionally it's much less clear what's going on. Compare it to this:
var operation;
if (addition) {
operation = function add (a, b) { return a + b; };
}
else {
operation = function subtract (a, b) { return a - b; };
}
console.log(operation(1, 2));
Here it's very obvious what's going on and your operation function has a name that reflects what it does.Personally I prever never to rely on function hoisting and always declare functions using function expressions. It keeps the code style more consistent and it's clearer what is happening in your program.