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
varjest ograniczony do funkcji, w której została zadeklarowana. - Zmienna
varmoż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ą
varstają się częścią globalnego obiektuwindow.
var saveStatusMessage = "Zapis poprawny";
console.log(window.saveStatusMessage); // "Zapis poprawny"
let deletedStatusMessage = "Usunięto poprawnie";
console.log(window.deletedStatusMessage); // undefinedZasię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: 10Dla 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:
- Nazwy mogą zawierać litery, cyfry, znaki
$i_. - Pierwszy znak nazwy zmiennej nie może być liczbą.
Konwencje Nazewnictwa:
- 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. - Nazwy powinny dokładnie opisywać zawartość zmiennej, unikając niejasnych lub ogólnych terminów jak
a,b,x,data,value,money. - Dla zmiennych składających się z wielu słów, zalecana jest notacja camelCase, np.
calculateTotalPrice. - Wielkość liter ma znaczenie:
nameróżni się odNAME. - Dla stałych zaleca się użycie całkowicie wielkich liter, np.
NAMElubDEFAULT_COLORdla nazw składających się z kilku słów, oddzielanych znakiem_.

