--- title: Hoisting slug: Glossary/Hoisting translation_of: Glossary/Hoisting ---

W języku {{Glossary("JavaScript")}}, {{Glossary("Function", "funkcje")}} oraz {{Glossary("Variable", "zmienne")}} są windowane. Windowanie (hoisting) w JavaScripcie oznacza przeniesienie deklaracji na samą górę (do globalnego {{Glossary("scope", "zasięgu")}} lub do zasięgu funkcji).

Oznacza to, że możesz użyć funkcji lub zmiennej przed jej zadeklarowaniem lub innymi słowy: funkcje lub zmienne mogę być deklarowane po ich użyciu.

Naucz się więcej

Przykład

Zmienne:

foo = 2
var foo;

// można to rozumieć jako:

var foo;
foo = 2;

Funkcje:

hoisted(); // w consoli zobaczymy "foo"

function hoisted() {
  console.log("foo");
}

Tylko deklaracje są windowane

W języku JavaScript tylko deklaracje są windowane, nie inicjalizacje. Jeśli zmienna zostanie zadeklarowana i zainicjalizowana po jej użyciu, wartość zmiennej będzię niezdefiniowana (undefined).

console.log(num); // zwróci undefined
var num;
num = 6;

Jeśli zadeklarujesz zmienną po tym jak zostanie użyta, ale zainicjalizujesz jej wartość przed tym, owa wartość zostanie zwrócona:

num = 6;
console.log(num); // zwróci 6
var num;

Dwa przykłady poniżej obrazują to samo zachowanie.

var x = 1; // inicjalizacja x
console.log(x + " " + y); // '1 undefined'
var y = 2; // inicjalizacja y

// Powyższy przykład jest rozumiany jako:
var x = 1; // inicjalizacja x
var y; // deklaracja y
console.log(x + " " + y); // '1 undefined'
y = 2; // inicjalizacja y

Odnośniki