Skip to main content

JavaScript Scope

What is Scope?โ€‹

Scope determines where variables can be accessed in your code. JavaScript uses lexical scoping - the position where variables are declared determines their accessibility.

Types of Scopeโ€‹

1. Global Scopeโ€‹

Variables declared outside any function or block:

var globalVar = "I'm global";
let globalLet = 'Also global';

function test() {
console.log(globalVar); // Accessible everywhere
}

2. Function Scopeโ€‹

Variables declared inside a function:

function myFunction() {
var functionScoped = 'Only inside function';
console.log(functionScoped); // Works
}

// console.log(functionScoped); // Error: not defined

3. Block Scopeโ€‹

Variables declared inside {} blocks (let/const only):

if (true) {
let blockScoped = 'Only in this block';
var functionScoped = 'Available in entire function';
}

// console.log(blockScoped); // Error: not defined
console.log(functionScoped); // Works (var ignores block scope)

Scope Chainโ€‹

JavaScript looks for variables from inner to outer scope:

var x = 'global';

function outer() {
var x = 'outer';

function inner() {
var x = 'inner';
console.log(x); // "inner" (finds closest scope)
}

inner();
console.log(x); // "outer"
}

outer();
console.log(x); // "global"

Key Rulesโ€‹

  • Inner scopes can access outer scope variables
  • Outer scopes cannot access inner scope variables
  • Variables are searched from innermost to outermost scope
  • var is function-scoped, let/const are block-scoped