Scope
The scope is the current context of execution in which values and expressions are "visible" or can be referenced. If a variable or expression is not in the current scope, it will not be available for use. Scopes can also be layered in a hierarchy, so that child scopes have access to parent scopes, but not vice versa.
JavaScript has the following kinds of scopes:
- Global scope: The default scope for all code running in script mode.
- Module scope: The scope for code running in module mode.
- Function scope: The scope created with a function.
In addition, identifiers declared with certain syntaxes, including let
, const
, class
, or (in strict mode) function
, can belong to an additional scope:
- Block scope: The scope created with a pair of curly braces (a block).
A function creates a scope, so that (for example) a variable defined exclusively within the function cannot be accessed from outside the function or within other functions. For instance, the following is invalid:
function exampleFunction() {
const x = "declared inside function"; // x can only be used in exampleFunction
console.log("Inside function");
console.log(x);
}
console.log(x); // Causes error
However, the following code is valid due to the variable being declared outside the function, making it global:
const x = "declared outside function";
exampleFunction();
function exampleFunction() {
console.log("Inside function");
console.log(x);
}
console.log("Outside function");
console.log(x);
Blocks only scope let
and const
declarations, but not var
declarations.
{
var x = 1;
}
console.log(x); // 1
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
See also
- Scope (computer science) on Wikipedia
- Block scoping rules