About the functions in JavaScript :
1, Pre-analysis: All the function definition in advance, all the variable declaration ahead of time, the assignment of the variable is not in advance
2, execution: From top to bottom execution, but with exception (callback function in Settimeout,setinterval,ajax, function in event need to trigger execution)
The argument to a function can be a function that can be called directly
function can be a return value
Nesting of functions to form closures
function has two identities:
1. Objects
2. Constructor function
First, the definition
Pre-parsing : In the current scope, JS run before, will have the var and function keyword in advance declaration, and in memory arrangements. Then execute the JS statement from top to bottom.
Pre-parsing occurs only on variables and function defined by var .
1.
var
When a variable defined by the var keyword is pre-parsed: It is declared declare, regardless of whether it is assigned, it will be assigned a value of undefined.
alert (a); Undefined
var a = 1;
alert (b); Undefined
var B = function () {
}
alert (c); Undefined
var C;
As long as it is defined by var , whether it is a variable, or a function, is the first assignment undefined, if it is a variable , and regardless of whether the variable is assigned, in the pre-parsing phase , will be assigned to the value of undefined.
2. Function
When a function is pre-parsed, it is not only declared but also defined (define), but the space in which it stores data is stored in the code as a string, without any meaning.
alert (a); The popup is the following function
function A () {
Alert ("Pre-analytic function")
}
3. Attention to this situation
It is not feasible to define a function to be executed immediately , as in the pre-interpretation, it breaks it down into two parts, the first part is the FN function, and the second part is (), an anonymous function , Error when executing. If the parentheses with parameters, such as (2), although not error, will print out 2, but not the FN execution, and can not be passed as a parameter to the FN function.
function fn() {
Code Area
}()
If you want to implement a function that executes immediately, you can put the function you want to execute into a pair of parentheses, for JavaScript , parentheses () cannot contain statements, so at this point, the parser parses the function keyword, the corresponding code is parsed into a function expression, rather than a function declaration, so long as the curly braces enclose the code (including part of the function and a pair of curly braces in the back). As follows:
(function fn () {
Code area ...
}())
Can also be written as: closures.
(function () {
Code area ...
})();
4, pre-analysis need to pay attention to the situation
Pre-parsingis happening inCurrent ScopeAt the beginning, we pre-parse the
Global ScopeIn
JSIn our
GlobalIs ours.
window。
when we run the function, we generate a new private scope (each execution is new, Destroy when execution is complete) we can understand this scope as opening up a new memory space. In this memory we also execute pre-parse . When our function is done, the memory or scope will be destroyed
if a variable under the current scope is not pre-parsed, it will be looked up to its upper level until window is found, if window The does not have a definition, it will be an error. Therefore, the variable defined by var within a function is local variable , No can over var defines a variable that is global variable .
Pre-parsing does not recur on the same variable, that is, if a variable has been pre-parsed under the current scope, no more parsing will be repeated. The function to the right of the
equals sign does not pre-parse.
alert (a);
FN ();
var a = function fn () {};
First print undefined, the second error, undefined, because pre-parsing, the right side of the = number is not pre-parsed.
The pre-interpretation is not affected by other if or other judging conditions, that is, if the condition is not established, we will have a var or function in it as a pre-explanation .
alert (a); Undefined
if (1==2) {
var a=12;
}
Defined later overrides the previously defined
alert (a); Eject function on the back
function A () {
var b;
}
alert (a); Still pops up the back function, because function is pre-parsed in advance
function A () {
var C;
}
JavaScript "Pre-parsing" is segmented, accurate is divided into <script> blocks.
When one of our functions returns a new function, we define a variable outside to receive it, so the memory of the function cannot be destroyed automatically after execution, which is what our so-called function memory is taking up.
The value of a variable depends on where it is defined, this, to see where it is called.
Day 112th: Function pre-parsing and execution phase in JavaScript