The function Statement Versus the function Expression
JavaScript has a function statement as well as
a function expression. This is confusing because
they can look exactly the same. A function
statement is shorthand for a var statement with a
function value.
The statement:
function foo( ) {}means about the same thing as:
var foo = function foo( ) {};Throughout this book, I have been using the second form because it makes it clear
that foo is a variable containing a function
value. To use the language well, it is important to understand that functions are
values.
function statements are subject to
hoisting. This means that regardless of where a function is placed, it is moved to the top of the
scope in which it is defined. This relaxes the requirement that functions should be
declared before used, which I think leads to sloppiness. It also prohibits the use
of function statements in if statements. It turns out that most browsers allow
function statements in if statements, but they vary in how that should be
interpreted. That creates portability problems.
The first thing in a statement cannot be a function expression because the official grammar assumes that a
statement that starts with the word function is a
function statement. The workaround is to wrap
the whole invocation in parentheses:
(function ( ) {
var hidden_variable;
// This function can have some impact on
// the environment, but introduces no new
// global variables.
}());