Dette er den første artikkelen i en serie som jeg gjør som fokuserer på å lære hva this
virkelig er I JS. For å kunne bestemme hva this
binder til, bør vi først forstå noen grunnleggende begreper som vi trenger når vi bestemmerthis
binding I JS og å vite hva som er kallstedet til en funksjon, er et av de avgjørende konseptene.
før du dykker inn I hva kallstedet til en funksjon er, la oss først prøve Å forstå HVORFOR vi trenger å vite call-site i utgangspunktet. Årsakene er som følger:
- det er sannsynligvis noe veldig enkelt å ‘site’ i et stykke kode. Men noen ganger kan visse kodingsmønstre skjule det virkelige anropsstedet. For å fjerne all tvetydighet knyttet til dette emnet, må du derfor forstå call-site (veldig tydelig).
- det er det eneste som betyr noe hvis du vil forstå hvordan
this
binding fungerer.
Når det er sagt, la oss nå forstå kallstedet til en funksjon.
vanligvis er anropsstedet til en funksjon ‘stedet der den bestemte funksjonen kalles i et gitt stykke kode’. Dermed går du til den plasseringen, og du vet hvor call-stedet for den funksjonen er!
la oss nå, gjennom følgende kodebit, se hvor kallstedene til funksjonene er:
det var enkelt! Men det er et lite problem med denne måten å finne anropsstedet på: noen ganger kan det være vanskelig å få øye på det manuelt (for eksempel: tenk deg 1000s kodelinjer, og du må finne anropsstedet manuelt!).
dette er hvor call-stack kommer inn i bildet. Hva er en call-stack? Det er en stabel (som navnet antyder). Av hva? Av funksjoner. Hvilke funksjoner? Av alle funksjonene som ble påberopt. For hva? For å få deg til hvor du er akkurat nå i utførelsen din (dvs.nåværende øyeblikk av utførelse).
hvis du ser på din call-stack, så den virkelige call-området ER innenfor funksjonen påkalling FØR funksjonen som for øyeblikket kjører.
nå, la oss bruke call-stack å finne kall-områder av funksjoner i samme kode som brukes ovenfor:
hurtigtips: I stedet for å manuelt finne ut hvilken rekkefølge funksjonene ble påkalt (det er feilutsatt og kjedelig), bør du bruke debugger-verktøyet i nettleseren din for å se call-stack. Debugger vil stoppe på linjen du angir stoppunkt og vil vise deg samtalen stack dvs. det vil vise deg alle funksjonene som ble påkalt for å få deg på det stedet i kode. Derfor er real call-site den andre funksjonen fra toppen i denne call-stack (dvs. i funksjonen påkalling FØR funksjonen som for øyeblikket utfører).
Dermed kan du finne anropsstedet til en funksjon på 2 måter:
- ved å manuelt spotte plasseringen der funksjonen ble påkalt i et gitt stykke kode, eller
- ved å se på call-stack (helst ved hjelp av feilsøkingsverktøy).
når du er i tvil (og generelt også), bruk alltid call-stack for å korrekt identifisere call-site av en funksjon.
Det er det! Dette er alt du trenger å vite for å finne call-stedet for en funksjon!
Neste Trinn:
Neste artikkel I Denne serien, JavaScript: Lær ‘dette’ – så hva er EN KONSTRUKTØR uansett?, fokuserer på å forstå konstruktører I JS.
Takk for at du leser. 🙂