The var
keyword in javascript causes a variable to be stored in the local scope. Without var
variables belong to the global scope. What about functions? It's clear what happens when functions are declared like variables
var foo = function() {...}
but what scope does
function foo() {...}
belong to?
EDIT: I realized I didn't ask quite the right question so as a follow up. In the outer most nesting is there a difference between the above two declarations and the following declaration?
foo = function() {...}
Your first example (
var foo = function() {...}
) is called an anonymous function. It is dynamically declared at runtime, and doesn't follow the same rules as a normal function, but follows the rules of variables.It belongs to the current scope, always. For example:
Regarding your second question, this:
is an anonymous function expression assigned to a global variable (unless you're running is strict mode, then
foo
would be undefined). The difference between that andfunction foo() {}
is that the latter is a function declaration (versus a variable declaration, which is assigned an anonymous function expression).You might be interested in this excellent article about function declarations and function expressions: Named function expressions demystified.
Function declarations are always local to the current scope, like a variable declared with the
var
keyword.However, the difference is that if they are declared (instead of assigned to a variable) their definition is hoisted, so they will be usable everywhere in the scope even if the declaration comes in the end of the code. See also var functionName = function() {} vs function functionName() {}.
Noteworthy distinction taking implicit globals into account:
Hopefully that clarifies a little. Implicit globals are defined if you forget a
var
before your assignment. Its a dangerous hazard that applies to variable declarations and functional expressions.