Funktion laajuus ja lohkon laajuus

Kun ilmoitat muuttujan funktion sisällä, muuttuja on sidottu funktioon, etkä pääse siihen käsiksi funktion ulkopuolella. var on avainsana, jolla voit määritellä muuttujan funktio-laajuuden käytettäväksi.

Nyt saatat kysyä, että jos se antaa virheen, vaikka käyttäisit let tai const, miksi vain var liittyy funktio-laajuuteen? Asia on niin, että let ja const käytetään määrittelemään lohkon laajuus, ja ennen ES6:sta JavaScriptissä ei ollut lohkon laajuutta tai let ja const.

Lohkon laajuus on if, switch ehtojen tai for ja while silmukoiden sisällä oleva alue. Yksinkertaisesti sanottuna , aina kun näet {sakaraiset sulut}, se on lohko.

Katsotaanpa esimerkki:

Nyt saatat olettaa, että yksikään lokikomennoista ei toimisi, mutta kuten näet, näin ei ole, sillä var:lla määritellyt muuttujat if-, switch-ehtojen tai for– ja while-silmukoiden sisällä olevat muuttujat ovat globaalisti käytettävissä ja kuuluvat globaaliin vaikutusalueeseen, ja siksi on parempi käytäntö käyttää niiden kanssa let– ja const-merkkejä.

Leksikaalinen laajuus

Viimein olemme päässeet tämän viestin todelliseen tarkoitukseen. No, olisin voinut ohittaa pitkän keskustelun laajuudesta, mutta henkilökohtaisesti en usko, että voit ymmärtää leksikaalista laajuutta tuntematta sen ympärillä pyöriviä keskeisiä osatekijöitä.

Jälleen yksi muistettava seikka:

Yksinkertaisesti sanottuna se tarkoittaa, että children scope pääsee käsiksi muuttujiin, jotka on määritelty parent scopeissa. Jos esimerkiksi määrittelen funktion ja ilmoitan muuttujan sen sisällä ja määrittelen saman funktion sisällä toisen funktion, minun pitäisi pystyä käyttämään kyseistä muuttujaa sisemmän funktion sisällä leksikaalisen skaalauksen vuoksi. Katsotaanpa esimerkki:

Esimerkistä nähdään, että outerFunction():ssa outerFunction() julistettuihin muuttujiin päästään käsiksi innerfunction():n kautta, tämä on leksikaalista scopingia.

Muuttujien laajuus määräytyy muuttujien sijainnin perusteella koodissa. Ratkaistakseen muuttujia JavaScript aloittaa sisimmästä laajuudesta ja etsii ulospäin, kunnes se löytää etsimänsä muuttujan. Yllä olevassa esimerkissä Javascript etsii ensin muuttujaa innerFunction():n sisältä, ja kun se ei löydä sitä, se siirtyy sen ulkopuolelle eli outerFunction()

Leksikaalinen rajaus on parempi, koska voimme helposti selvittää muuttujan arvon koodista, kun taas dynaamisessa rajauksessa muuttujan merkitys voi muuttua ajon aikana, mikä tekee siitä monimutkaisen ymmärtää.

Ymmärsimme siis onnistuneesti, mitä leksikaalinen rajaus on, nyt tarkastellaan sulkuja, joissa leksikaalista rajausta todella käytetään.

Vastaa

Sähköpostiosoitettasi ei julkaista.