Nøkkelen til å fikse en " Out of Stack Space " feil, også mer generelt kjent som en stack overflow feil , er å først forstå hva det betyr. Når en funksjon kalles i JavaScript, blir funksjon og variablene kopiert til minnet i det som kalles stabelen. Hvis det funksjonskall en annen funksjon ( eller den samme funksjon på nytt) , så barnet funksjonen er også lagt inn i stabelen. Hvis denne formen for rekursive kall av funksjoner overskrider grensen for rekursjon som er definert av nettleseren , deretter JavaScript vil returnere en stack overflow feil . Instruksjoner
en
Sjekk for en uendelig looping funksjon. Dette er den enkleste og mest vanlige årsak til en stabel overløp feil . Når en funksjon kaller seg , bruke betinget utsagn for å sikre at funksjonen kan aldri sløyfe seg til en overflow feil . Bruk en teller variabel eller en initialisering variabel , eller sjekke verdien av en variabel som er manipulert av funksjonen for å avgjøre hvorvidt det er blitt henrettet allerede.
2
Sjekk for to eller flere funksjoner som kaller hver andre for å danne en uendelig løkke . Når en funksjon kaller hverandre, være oppmerksom på at hvis den andre funksjonen kaller tilbake den første , kan det være mulig for koden for å sløyfe innenfor disse funksjonene . Dette kan også skje med mer enn to funksjoner , og det kan være mye vanskeligere å få øye på enn en looping funksjon . Løsningen er den samme uansett : Bruk betinget utsagn for å ivareta kode mot looping uendelig
3
Sjekk for høye nivåer av rekursjon som kreves for en funksjon for å utføre . . Noen ganger dypt rekursive funksjoner er ikke en forglemmelse , men er en del av koden design. Hvis dette er tilfelle, så se om funksjonen kan deles inn i flere funksjoner som kjører i serien, hver med et lavere nivå av rekursjon .
4
Bygg din egen stack . Gjør dette ved å opprette et utvalg som skal forvalte variablene funksjonen krever for å utføre og deretter kaller funksjonen i en loop. Ved å lagre disse variablene og deretter kaller funksjonen sekvensielt fra en loop, kan du imitere atferden til en rekursiv funksjon uten å være avhengig JavaScript stack atferd.