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”

Podelite:

Ostavite komentar