let & const

let & const

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.

let & const

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“