JavaScript let/const

Block-scoped binding constructs: let is the new var & const is single-assignment. Static restrictions prevent use before assignment.

function f() {
  {
    let x
    {
      // Okay, block scoped name
      const x = 'sneaky'
      // Error, const
      x = 'foo'
    }
    // Error, already declared in block
    let x = 'inner'
  }
}