Deo zbornika Učimo Javascript
Opseg važenja varijabli u Javaskriptu
Sve varijable u Javascriptu imaju svoj opseg važenja. Ukoliko njihov opseg važenja nije omeđen, podrazumevano se nalaze u globalnom imenskom prostoru.
let
i const
važe samo u bloku u kom su definisane. Njihov opseg važenja je omeđen vitičastim zagradama { }
. Stare varijable var
su omeđene samo opsegom funkcije, a važe izvan svih drugih blokova u kojima su definisane. Za razliku od njih, let
i const
ne mogu važiti izvan vitičastih zagrada.
Nakon ovođenja ES6 standarda, upotreba let
i const
se preporučuje jer vrednosti ne izlaze u vanjski opseg.
Primer: važenje opsega bloka
// a je u globalnom prostoru
const a = 10
// b je unutar bloka
{
const b = 20
}
console.log(a) // a je dostupno
console.log(b) // b je nedostupno i izbacuje grešku
Primer: nevaženje opsega bloka
Stare promenljive var
možemo zatvoriti samo u opseg funkcije, inače ignorišu sve druge blokove (petlje, uslove i sl.). U sledećem primeru vidimo da var
ignoriše vitičaste zagrade:
{
var b = 20
}
console.log(b) // b je dostupno
Primer: opsega važenja funkcije
Za stare promneljive var
važi samo opseg funkcije. Promenljiva koja je definisana u funkciji nije vidljiva izvan nje. Na primer:
var a = 1
function f() {
var b = 1
}
console.log(a)
console.log(b)
Promenljiva a
je u globalnom prostoru, dok je promenljiva b
u opsegu važenja funkcije f()
. Zbog toga:
- Unutar funkcije
f()
vidljive su promenljivea
ib
. - Izvan funkcije
f()
vidljiva je samo promenljivaa
.
Primer: ponovno proglašenje promenljive unutar bloka
Pokušaj da pogodiš šta će biti ispis, kada imamo dve promenljive pod istim imenom u dva različita opsega:
let ime = "Vatroslav"
{
let ime = "Jaroslava"
}
console.log(ime)
Ovde imamo dve varijable proglašene u dva različita opsega, a čitamo onu iz spoljnjeg.
Primer: ponovna dodela vrednosti unutar bloka
Pokušaj opet da pogodiš ispis, kada smo izbacili proglašenje varijable u unutrašnjem opsegu:
let ime = "Vatroslav"
{
ime = "Jaroslava"
}
console.log(ime)
Ovde imamo jednu varijablu proglašenu u spoljašnjem opsegu, a izmenjenu u unutrašnjem. Moguće je pristupiti spoljnjim varijablama iz unutrašnjeg opsega, ali ne i obratno.
Globalne promenljive
Globalne promenljive su sve one koje nisu ni u jednom opsegu. Dobra je praksa smanjiti broj globalnih promenljivih na minimum, da bismo izbegli sukob naziva iz različitih skripti.
Svakoj globalnoj varijabli možeš pristupiti iz konzole pregledača. Na primer, ako u fajlu postoji globalna varijabla ime
, otvori web stranicu, otvori konzolu, u konzoli ukucaj ime
i ispisaće ti se vrednost varijable. Ovo može biti i bezbednosni rizik, jer bilo ko može čitati, pa čak i menjati globalne promenljive.