Przed pojawieniem się ES6
Zmienne - deklaracja zmiennych w JavaScript do momentu pojawienia się ES6 była możliwa przy użyciu słowa kluczowego "var". Zmienne z deklaracją "var" mają zasięg funkcyjny, są hoistowane.
Deklaracja
var magicNumber = 12;
Hositing
console.log(magicNumber); //undefined
var magicNumber = 12;
co odpowiada interpretacji jak poniżej
var magicNumber;
console.log(magicNumber); //undefined
magicNumber = 12;
Zasięg funkcyjny
var magicNumber; //zasięg globalny
function runCode() {
var magicNumber = "12"; //magicNumber z var zasięg funkcyjny lokalny
console.log(magicNumber);
}
runCode();
console.log(magicNumber);
//12
//undefined
Pominięcie var - zmienna przypisywana do zasięgu globalnego jeśli wyłączony "use strict" -
pominięcie słowa kluczowego "var" wewnątrz funkcji powoduje utworzenie zmiennej w zasięgu globalnym. Czyli w przypadku browsera w obiekcie window, w przypadku nodejs w obiekcie global.
//zasięg globalny var magicNumber;
function runCode() {
magicNumber = "12"; //magicNumber bez var zasięg globalny
console.log(magicNumber);
}
runCode();
console.log(magicNumber);
console.log(window.magicNumber);
//12
//12
//12
Pominięcie var - zmienna nie przypisywana do zasięgu globalnego jeśli włączony "use strict" - pominięcie słowa kluczowego "var" wewnątrz funkcji nie powoduje utworzeniaz miennej w zasięgu globalnym z wyłączonym "use strict".
"use strict"
//zasięg globalny nie powstanie var magicNumber;
function runCode() {
magicNumber = "12"; //magicNumber zgłoszony error
console.log(magicNumber);
}
runCode();
console.log(magicNumber);
console.log(window.magicNumber);
//Uncaught ReferenceError: magicNumber is not defined
Stałe – nie istniały, dlatego często symbolizowało się je z wykorzystaniem odpowiednio zapisanej nazwy zmiennej, w tak zwanej notacji ALL_CAPS. Nic nie stało na przeszkodzie żeby stosować inne notacje, ale umownie dla odróżnienia zmiennej od stałej używano ALL_CAPS.
var MY_PI = 3.14;
Deklaracja zmiennych i stałych w JavaScript w ES6 niebawem.