Content: Scope and Scope Chain
Scope
Global Scope
Function Scope
Note: There is no block-level scope in JavaScript
1 | // The first type {} |
The code examples demonstrate that in JavaScript, using var
declares variables in the function scope or global scope, not in the block scope. This means that variables declared with var
inside of blocks such as {}
, if
, or for
are accessible outside of these blocks.
Scope Chain
The inner function scope can access variables from its outer scope, but the outer scope cannot access variables defined in the inner scope.
1 | var a = 10; |
The above example illustrates how the scope chain works in JavaScript. Functions fn
and fn2
are able to access the variables a
and b
from their parent function foo
, as well as their own local variables c
and d
, respectively. This is because JavaScript scopes are lexically or statically defined by their position within the source code. When a variable is used, JavaScript looks up the scope chain until it finds the variable or reaches the global scope.
This is a fundamental concept in JavaScript known as lexical scoping, where the accessibility of variables is determined by the position of variables within the nested functions. The scope chain is created at the function’s creation time, and it is the chain of function’s scopes, which is used to resolve the values of variable names in JavaScript.