Scope, hoisting, event loop: Shadowing

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