Zmienne stanowią kluczowy element w programowaniu, niezależnie od języka. Każdy program, w trakcie swojego działania, musi przechowywać dane. Zmienne, jak sama nazwa wskazuje, pozwalają na przechowywanie informacji, które mogą ulegać zmianom w trakcie życia programu. Oprócz zmiennych istnieją także stałe, których wartości, w przeciwieństwie do zmiennych, pozostają niezmienne.

Od wersji ECMAScript 6 (ES6), wprowadzono nowe słowa kluczowe do deklarowania zmiennych: let i const. Użycie tych słów kluczowych wymaga ich wcześniejszej deklaracji. Przed wprowadzeniem ES6, jedynym słowem kluczowym do deklarowania zmiennych było var, które nadal jest częścią języka, ale ma nieco inne właściwości, szczególnie jeśli chodzi o zakres (scope) zmiennej.

let

Deklaracja zmiennej za pomocą let pozwala na późniejszą zmianę jej wartości. Przykłady deklaracji:

let message;

//deklaracja kilku zmiennych
let error, infoMessage;

Zmienne zadeklarowane, ale niezainicjowane, mają domyślnie wartość undefined. Zalecaną praktyką jest jednak przypisanie wartości początkowych:

let message = "Zapis poprawny!";

//deklaracja kilku zmiennych
let error = "Błąd zapisu", infoMessage = "Podaj hasło";

Deklaracja wielu zmiennych w jednej linii jest możliwa, ale może wpływać negatywnie na czytelność kodu. Wartość zmiennej let można zmieniać, również na wartości różnych typów:

let message = "Zapis poprawny!"; //wartośc początkowa String
message = 123; // zmiana na Number
message = true; // zmiana na Boolean
message = {name: "Tom"}; // zmiana na Object

const

W przeciwieństwie do let, zmienne zadeklarowane jako const muszą być inicjowane w momencie deklaracji i ich wartości nie mogą być później zmieniane:

const MESSAGE_SUCCESS = "Zapis poprawny";

//próba zmiany wartości:
MESSAGE_SUCCESS = "Zapis błedny";
// rzuci błędem:
// Assignment to constant variable.

var

Choć var jest nadal częścią JavaScript, jego użycie jest obecnie zalecane tylko w starszych skryptach. Różni się od let w kilku kluczowych aspektach:

  • Zakres zmiennej var jest ograniczony do funkcji, w której została zadeklarowana.
  • Zmienna var może być użyta przed jej deklaracją ze względu na zjawisko hoistingu.
  • za pomocą var można kilkakrotnie deklarować zmienną
  • Zmienne globalne zadeklarowane za pomocą var stają się częścią globalnego obiektu window.
var saveStatusMessage = "Zapis poprawny";
console.log(window.saveStatusMessage); // "Zapis poprawny"

let deletedStatusMessage = "Usunięto poprawnie";
console.log(window.deletedStatusMessage); // undefined

Zasięg zmiennych

Zakres zmiennej określa jej widoczność i dostępność w różnych częściach kodu. W JavaScript, let i const mają zakres blokowy, co oznacza, że są dostępne tylko wewnątrz bloku kodu (np. wewnątrz klamer {}). Jeśli zmienna jest zadeklarowana poza jakimkolwiek blokiem, staje się zmienną globalną, dostępną w całym kodzie.

Przykład:

// Globalna zmienna
let userName = 'Alex'; 

function displayUserPreferences() {
    // Lokalna zmienna
    let themeColor = 'dark'; 
     // Stała lokalna
    const FONT_SIZE = '16px'; 

    console.log(userName + " prefers a " + themeColor + " theme with font size " + FONT_SIZE);
    // Wynik: 'Alex prefers a dark theme with font size 16px'

    // Zmiana lokalnego motywu
    themeColor = 'light';
}

displayUserPreferences();

console.log(userName + " global preference check."); 
// Wynik: 'Alex global preference check.'
console.log("Outside function, theme is " + themeColor);
// Błąd: 'themeColor' nie jest zdefiniowane poza funkcją
// ReferenceError: themeColor is not defined

Zmienne jako referencje do pamięci

W JavaScript, zmienne można rozumieć jako referencje do miejsc w pamięci RAM komputera. Kiedy tworzymy zmienną i przypisujemy jej wartość, nie przechowujemy bezpośrednio tej wartości w zmiennej. Zamiast tego, zmienna „wskazuje” na miejsce w pamięci, gdzie ta wartość jest przechowywana.

W JavaScript, sposób działania przypisania zmiennych zależy od typu danych, z którymi pracujemy. Rozróżniamy tutaj dwa główne typy danych: proste (takie jak liczby, wartości logiczne, łańcuchy znaków) i złożone (takie jak obiekty, tablice).

Dla Typów Prostych:

Gdy przypisujemy wartość jednej zmiennej do innej dla typów prostych, JavaScript tworzy nową kopię tej wartości. Oznacza to, że każda zmienna przechowuje osobną kopię wartości w swoim własnym miejscu w pamięci. Zmiany dokonane na jednej zmiennej nie wpływają na drugą.

Przykład:

let a = 10;
let b = a;  // Tworzy nową kopię wartości 10
b = 20;     // Zmiana wartości b nie wpływa na a
console.log(a);  // Wynik: 10

Dla Typów Złożonych:

W przypadku typów złożonych, takich jak obiekty i tablice, przypisanie zmiennej do innej zmiennej nie tworzy nowej kopii obiektu lub tablicy. Zamiast tego, obie zmienne wskazują na ten sam obiekt/tablicę w pamięci. To oznacza, że zmiany dokonane za pomocą jednej zmiennej są odzwierciedlane w drugiej, ponieważ obie zmienne odnoszą się do tego samego adresu pamięci.

Przykład:

let originalNumber = 10;
let copiedNumber = originalNumber; // Tworzy kopię wartości

let originalObject = { name: "Alex" };
let copiedObject = originalObject; // Nie tworzy nowego obiektu, tylko kopiuje referencję

copiedObject.name = "Chris";
console.log(originalObject.name); // Wynik: "Chris"

Nazwy zmiennych i stałych

Ograniczenia Techniczne:

  1. Nazwy mogą zawierać litery, cyfry, znaki $ i _.
  2. Pierwszy znak nazwy zmiennej nie może być liczbą.

Konwencje Nazewnictwa:

  1. Mimo że dozwolone jest użycie znaków UNICODE, czyli poprawną nazwa zmiennej by było np promień, ale zaleca się unikanie skomplikowanych lub nietypowych znaków w nazwach.
  2. Nazwy powinny dokładnie opisywać zawartość zmiennej, unikając niejasnych lub ogólnych terminów jak a, b, x, data, value, money.
  3. Dla zmiennych składających się z wielu słów, zalecana jest notacja camelCase, np. calculateTotalPrice.
  4. Wielkość liter ma znaczenie: name różni się od NAME.
  5. Dla stałych zaleca się użycie całkowicie wielkich liter, np. NAME lub DEFAULT_COLOR dla nazw składających się z kilku słów, oddzielanych znakiem _.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *