JavaScript scopes are the accessible scope of variables and functions.
1. Variable Scope
In JavaScript, variable scopes are divided into global scope and local scope.
Global scope
You can define a variable with global scope Anywhere
1. Variables not declared with VAR (except for function parameters) have global scope and become global variables, so declaring local variables must be in var
All properties of 2.window have global scope
3. Variables declared outside the outermost function also have global scope
var globalscope= "Globalscope";
function Checkscope () {
var partscope= "part";
Scope= "Scope";
}
Checkscope ();
Console.log (Globalscope);//globalscope, global variable
console.log (scope); Scope, global variable
console.log (partscope);//uncaught Referenceerror:partscope is not defined, error: Not defined Partscope
Local scope
1. Variables declared in the function body have local scope and become local variables
2. The parameters of the function also have a local scope
var globalscope= "Globalscope";
function Checkscope (x) {
scope= "scope";//becomes global variable
var partscope= "part";//In function body, declare local variable must add VA R
var globalscope= "Partscope";
}
Checkscope (a);
Console.log (Globalscope);//globalscope, in the body of a function, the precedence of local variables is higher than the global variable
console.log (scope),//scope, global variable Console.log ( Partscope);
Console.log (Partscope);//uncaught referenceerror:partscope is not defined, outside of local variable access
console.log (x);//Outside local variable The face is not accessible
Summary: Local variables in the function body have precedence over global variables of the same name, declaring that local variables must be in Var
2. Function scopes
Some Class C languages are block-level scopes , and each curly brace is a scope, and the code inside the curly braces is invisible to the outside world. and
JavaScript is a functional scope (function scope) and does not have a block-level scope. Regardless of where the variable in the function is declared, it is visible to the entire function, that is, all variables declared in the JavaScript function are advanced to the top of the function body, only the advance variable declaration, and the assignment of the variable remains in the original position .
A function scope can only declare a stand-alone scope with a function, not every curly brace is a separate scope, for example: The For loop does not create a local scope
for (Var i=0;i<5;i++) {
var scope= ' scope ';
Console.log (i)//5;i still exists because JavaScript is a function scope rather than a block-level scope
console.log (scope);//scope;scope still has function
Checkscope () {
console.log (funscope);//undefined, all variables declared in the function are advanced to the top of the function body, so funscope will assume that it already exists
var funscope= "Funscope";
}
Checkscope ();
3. Scope Chain
scope chain : JavaScript variables are properties of objects, which may be properties of other objects, and all objects are properties of global Objects , so the relationship of these objects can be considered as a chain,
The chain is the object where the variable is, and the end of the chain is the global object
function Checkscope (scope) {
var funscope= "Funscope";
var s=scope;
}
When the value of the variable funscope is found, the current object is found, and if the current object is not found, it continues to look for the next object on the scope chain, and if no object on the scope chain contains this property, a reference error is thrown.
There are two objects on the scope chain in the body that does not contain nested functions:
1. Objects that define function parameters and local variables
2. Global objects
In a nested function body, there are at least three objects on the scope chain