Czym jest var w JavaScript

Słowo kluczowe var w JavaScript jest używane do deklarowania zmiennych przed wprowadzeniem ES6, które wprowadziło let i const. Chociaż var wciąż jest częścią języka, ważne jest zrozumienie jego zachowania i różnic w zakresie w porównaniu do let i const.

Zakres zmiennej zadeklarowanej przez var

Zmienne zadeklarowane przez var mają zakres funkcyjny (function scope) lub są traktowane jako globalne, jeśli nie zostały zadeklarowane wewnątrz funkcji. Oznacza to, że zmienna jest dostępna w całej funkcji, bez względu na bloki kodu, w których została zadeklarowana.

function exampleFunction() {
    if (true) {
        var functionScopedVariable = "Dostępna w całej funkcji";
    }
    console.log(functionScopedVariable); // "Dostępna w całej funkcji"
}

exampleFunction();
// console.log(functionScopedVariable); 
// Błąd: functionScopedVariable is not defined, bo
// nie ma dostępu do zmiennej var gdyż ma zakres funkcyjny

W przeciwieństwie do let i const, które mają zakres blokowy, zmienne zadeklarowane za pomocą var nie są ograniczone do bloku w pętlach czy instrukcjach warunkowych. Oznacza to, że zmienne te są dostępne poza blokami, w których zostały zadeklarowane, jeśli znajdują się w tym samym zakresie funkcji lub są globalne.

Przykład w pętli

Poniższy przykład ilustruje, jak zmienna zadeklarowana przez var w pętli for zachowuje się po zakończeniu pętli:

for (var i = 0; i < 3; i++) {
    console.log("Wewnątrz pętli: i = " + i);
}

console.log("Poza pętlą: i = " + i); // i jest dostępne poza pętlą!!!

// Wynik w konsoli:
// Wewnątrz pętli: i = 0
// Wewnątrz pętli: i = 1
// Wewnątrz pętli: i = 2
// Poza pętlą: i = 3

Jest to bardzo ważne zachowanie var, przez co powoduje błędy gdy korzystają z niego niedoświadczeni programiści, dlatego zaleca się używanie obecnie wyłącznie let i const, gdyż nie mają tego problemu.

Podobnie var zachowa się z instrukcją if, też zmienna z var nie będzie miała zakresu blokowego

if (true) {
    var conditionVar = "Zmienna z instrukcji warunkowej";
}

console.log(conditionVar); // Dostępne również poza instrukcją warunkową

Gdybyśmy użyli let lub const zamiast var, zmienne te miałyby zakres blokowy, co oznacza, że nie byłyby dostępne poza blokiem, w którym zostały zadeklarowane:

if (true) {
    let blockScopedLet = "Jestem w zakresie blokowym";
    const blockScopedConst = "Ja również";
}

// console.log(blockScopedLet); // Błąd: blockScopedLet is not defined
// console.log(blockScopedConst); // Błąd: blockScopedConst is not defined

Podsumowanie

Brak zakresu blokowego dla zmiennych zadeklarowanych za pomocą var podkreśla, dlaczego w nowoczesnym JavaScript zaleca się stosowanie let i const dla lepszej kontroli nad zakresem zmiennych. Używanie let i const zapewnia większą klarowność kodu, ograniczając widoczność zmiennych do bloków, w których są one faktycznie potrzebne i używane.

Jeżeli chcesz przyśpieszyć swoją naukę chciałbym polecić mój kurs video JavaScript w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

 

 

 

Scroll to Top