W języku JavaScript, funkcje oraz zmienne są windowane. Windowanie (hoisting) w JavaScripcie oznacza przeniesienie deklaracji na samą górę (do globalnego 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
- JavaScript: Understanding the Weird Parts - Udemy.com Course
- var statement - MDN
- function statement - MDN