tilbage til lektionen

Er variablen synlig?

vigtighed: 4

Hvad vil resultatet være af denne kode?

let x = 1;

function func() {
  console.log(x); // ?

  let x = 2;
}

func();

P.S. Der er en lille fælde i denne opgave. Løsningen er ikke åbenlys.

Resultater er: fejl.

Prøv at køre den:

let x = 1;

function func() {
  console.log(x); // ReferenceError: Cannot access 'x' before initialization
  let x = 2;
}

func();

I eksemplet kan vi observere den lille forskel mellem en “ikke eksisterende” og en “ikke-initialiseret” variabel.

Som du måske har læst i artiklen Variable scope, closure, starter en variabel i “ikke-initialiseret” tilstand fra det øjeblik, hvor udførelsen indtager et kodeblok (eller en funktion). Og den forbliver ikke-initialiseret indtil den tilsvarende let-erklæring.

Med andre ord, en variabel eksisterer teknisk set, men kan ikke bruges før let.

Koden ovenfor demonstrerer dette.

function func() {
  // den lokale variable x er kendt af motoren fra det øjeblik funktionen starter,
  // men "ikke-initialiseret" (ubrugelig) indtil let ("dead zone")
  // derfor fejlen

  console.log(x); // ReferenceError: Cannot access 'x' before initialization

  let x = 2;
}

Denne zone af midlertidig ubrugelighed af en variabel (fra begyndelsen af kodeblokken til let) kaldes ofte “dødszonen” (dead zone).