Zajedničke karakteristike
Block scope
Ključne reči let i const ispred promenjive deklariše promenjivu, koja je dostupna jedino u svom lokalnom domenu tzv. “block scope”. Kada se promenjiva deklariše sa let/const u okviru vitičaste zagrade, onda su vitičaste zagrade ivice njenog domena.
Nema hoistovanja promenjive pri kompajliranju
Promenjive deklarisane sa “let/const” se ne hoist-uju na vrh bloka, kao što to rade promenjive deklarisane sa “var”.
Ne prave globalne promenjive
Treba napomenuti da ključne reči “let/const” ne prave globalne promenjive čak i kada se nalazi u globalnom domenu:
Specifičnosti “let” ključne reči
Block scope
Promenjiva može da se deklariše sa ključnom reči “let” i van vitičastih zagrada, pri čemu će ipak pripadi domenu koji prave te vitičaste zagrade. Ovaj izuzetak važi za slučaj kada se promenjiva deklariše u okviru izraza vezanog za iteraciju:
Redeklarisanje promenjive u istom bloku pravi Syntax Error
Za razliku od deklaracije promenjive sa ključnom reči “var” gde je dozvoljeno ponovno redaklarisanje promenjive, redeklarisanje promenjive u istom domenu sa ključnom “let” nije dozvoljeno, i izbacuje grešku.
Zbog ovoga treba obratiti pažnju da se ne koristi u okviru “switch” izraza jer je sve jedan domen:
Ovaj problem može da se prevazidje na sledeći način:
Rešava problem iteracije i setTimeout() metode
Korišćenjem ključne reči “let” umesto “var”, u okviru “for…petlje”, jednostvno rešavamo poznati problem vezan za iteraciju u okviru setTimeout metode.
Pošto ključna reč “let” ponovo definiše novu promenjivu “i” pri svakoj iteraciji petlje, onda se dobija očekivani rezultat:
Više o ovome problemu pogledajte u članku “(Ne)moguće greške u JavaScriptu”.
Specifičnost “const” ključne reči
Promenjive deklarisane sa ključnom reči “const” generiše konstantu. Konstante u JavaScriptu su “nepromenljive varijable”, tj. varijable kojima se ne može ponovo dodeliti novi sadržaj.
Promenjivost sadržaja konstante!?
Treba napomenuti da nepromenjivost važi samo za promenjivu, ali ne i za nepromenjivost sadržaja konstante!
ili kao u sledećem primeru dodavanje novih članova nizu neće napraviti grešku:
Prava konstanta sa nepromenjivim sadržajem
Ako bi smo hteli da i sadržaj bude nepromenjiv onda je potrebno da koristimo i metodu Object.freeze():
Pogledajte više o “Object.freeze()” u članku “Object() & Object.prototype”