[size=medium]Technically speaking, the function statement is not a statement. Statements cause dynamic behavior in a
JavaScript program, while function definitions describe the static structure of a program. Statements are
executed at runtime, but functions are defined when JavaScript code is parsed, or compiled, before it is
actually run. When the JavaScript parser encounters a function definition, it parses and stores (without
executing) the statements that comprise the body of the function. Then it defines a property (in the call
object if the function definition is nested in another function; otherwise, in the global object) with the
same name as the function to hold the function.
The fact that function definitions occur at parse time rather than at runtime causes some surprising
effects. Consider the following code:
These unusual results occur because function definition occurs at a different time than variable definition.
Fortunately, these situations do not arise very often.[/size]
JavaScript program, while function definitions describe the static structure of a program. Statements are
executed at runtime, but functions are defined when JavaScript code is parsed, or compiled, before it is
actually run. When the JavaScript parser encounters a function definition, it parses and stores (without
executing) the statements that comprise the body of the function. Then it defines a property (in the call
object if the function definition is nested in another function; otherwise, in the global object) with the
same name as the function to hold the function.
The fact that function definitions occur at parse time rather than at runtime causes some surprising
effects. Consider the following code:
alert(f(4)); // Displays 16. f( ) can be called before it is defined.
var f = 0; // This statement overwrites the property f.
function f(x) { // This "statement" defines the function f before either
return x*x; // of the lines above are executed.
}
alert(f); // Displays 0. f( ) has been overwritten by the variable f.
These unusual results occur because function definition occurs at a different time than variable definition.
Fortunately, these situations do not arise very often.[/size]