Różnice między var, let i const w Node.js – poradnik dla początkujących

W JavaScript, a więc także w Node.js, mamy trzy sposoby deklarowania zmiennych: var, let i const. Każdy z nich różni się zakresem działania (scopem), możliwością ponownej deklaracji i przypisania wartości, a także zaleceniami dotyczącymi użycia. Poznaj te różnice, aby pisać bezpieczny i czytelny kod.
MS

Marcin Stawowczyk · @m7rlin

2 min czytania ·

Zakres działania (scope):

  • var – zmienne są widoczne w całej funkcji, w której zostały zadeklarowane (function scope), albo globalnie, jeśli zadeklarowano je poza funkcją.

  • let i const – zmienne są widoczne tylko w bloku, w którym zostały zadeklarowane (block scope), czyli np. wewnątrz {} w pętli, instrukcji warunkowej lub funkcji.

Przypisywanie i redeklaracja:

Typ

Możliwość ponownego przypisania

Możliwość redeklaracji w tym samym scope

var

Tak

Tak

let

Tak

Nie

const

Nie

Nie

  • var można zarówno ponownie przypisywać, jak i deklarować w tym samym zakresie, co może prowadzić do błędów i trudnych do znalezienia bugów.

  • let można przypisać nową wartość, ale nie można zadeklarować ponownie w tym samym zakresie.

  • const wymaga przypisania wartości w momencie deklaracji i nie pozwala na jej zmianę ani ponowną deklarację. Wyjątek: jeśli przypiszesz do const obiekt lub tablicę, możesz zmieniać ich zawartość, ale nie możesz przypisać nowego obiektu lub tablicy.

Hoisting (wynoszenie):

  • Wszystkie trzy są hoistowane, ale tylko var jest inicjalizowany wartością undefined. Próba użycia let lub const przed deklaracją skutkuje błędem.

Załączam osobny poradnik Czym jest hoisting w javascriptcie.

Kiedy używać którego?

  • Nie używaj var, chyba że musisz utrzymać stary kod lub masz bardzo specyficzny powód. Może prowadzić do nieoczekiwanych błędów przez zbyt szeroki zakres widoczności zmiennej i możliwość ponownej deklaracji.

  • Używaj let, gdy wartość zmiennej ma się zmieniać w trakcie działania programu (np. licznik w pętli, tymczasowe wartości).

  • Używaj const zawsze, gdy wartość nie powinna się zmieniać (np. stałe, referencje do obiektów, których nie zamierzasz podmieniać). To domyślny wybór w nowoczesnym kodzie JavaScript.


Praktyczne przykłady

Przykłady użycia var:

function testVar() {
  if (true) {
    var x = 10;
  }
  console.log(x); // 10 – x jest widoczne w całej funkcji
}
testVar();
var y = 5;
var y = 15; // Możliwa redeklaracja w tym samym zakresie
console.log(y); // 15

Przykłady użycia let:

if (true) {
  let a = 20;
  console.log(a); // 20
}
console.log(a); // ReferenceError – a nie jest widoczne poza blokiem
let counter = 0;
counter = 1; // Można przypisać nową wartość
console.log(counter); // 1

Przykłady użycia const:

const pi = 3.14159;
// pi = 3.14; // Błąd! Nie można przypisać nowej wartości
console.log(pi); // 3.14159
const arr = [1, 2, 3];
arr.push(4); // Dozwolone – zmieniamy zawartość tablicy, nie referencję
console.log(arr); // [1, 2, 3, 4]
// arr = [5, 6]; // Błąd! Nie można przypisać nowej tablicy

Podsumowanie

  • var – unikaj, chyba że musisz; function scope, pozwala na ponowną deklarację i przypisanie.

  • let – używaj, gdy wartość zmiennej ma się zmieniać; block scope, pozwala na przypisanie, nie pozwala na redeklarację.

  • const – domyślny wybór; block scope, nie pozwala na przypisanie ani redeklarację, ale pozwala na modyfikację zawartości obiektów/tablic.

Najlepsza praktyka: zaczynaj od const, zmień na let tylko wtedy, gdy musisz zmieniać wartość zmiennej. Unikaj var w nowym kodzie.