Scope, hoisting, event loop: Shadowing

Join the AI Workshop to learn more about AI and how it can be applied to web development. Next cohort February 1st, 2026

The AI-first Web Development BOOTCAMP cohort starts February 24th, 2026. 10 weeks of intensive training and hands-on projects.


Any variable defined in a function (or block) with the same name as a global variable takes precedence over the global variable, shadowing it.

This prints undefined:

var name = 'Roger'

function run() {
  console.log(name)
  var name = 'Flavio'
}

run()

and this raises an error ReferenceError: name is not defined:

let name = 'Roger'

function run() {
  console.log(name)
  let name = 'Flavio'
}

run()

Lessons in this unit:

0: Introduction
1: Global scope
2: Function scope
3: Block scope
4: ▶︎ Shadowing
5: Hoisting
6: Closures
7: An issue with `var` variables and loops
8: The event loop