Nyckeln till fastställande av en "Out of stackutrymme " fel , även mer allmänt känd som en stack overflow fel , är att först förstå vad det innebär . När en funktion anropas i JavaScript , är funktionen och dess variabler kopieras till minnet i vad som kallas stapeln . Om denna funktion anropar en annan funktion (eller samma funktion igen) , då barnet funktionen läggs också till stapeln. Om denna form av rekursiv kallelse funktioner överskrider gränsen för rekursion som är definierat av webbläsaren , och JavaScript kommer att returnera en felaktig stack overflow . Instruktioner
1
Kolla för ett oändligt kretsa funktion . Detta är det enklaste och vanligaste orsaken till ett stack overflow fel . När en funktion kallar sig , använda villkorssatser för att säkerställa att funktionen kan aldrig slinga sig in i ett överflöd fel . Använd en räknare variabel eller en initiering variabel , eller kontrollera värdet på en variabel som är manipulerade av funktionen för att avgöra om den har utförts redan .
2
Kontrollera två eller fler funktioner som anropar varje för att bilda en oändlig slinga . Närhelst en funktion anropar varandra , vara medveten om att om den andra funktionen samtal tillbaka den första , kan det vara möjligt för koden till slingan inom dessa funktioner . Detta kan även hända med mer än två funktioner , och det kan vara mycket svårare att upptäcka än en looping funktion. Lösningen är lika åt båda hållen : Använd villkorssatser för att skydda koden mot looping oändligt Addera 3
Kontrollera höga nivåer av rekursion som krävs för en funktion för att köra . . Ibland djupt rekursiva funktioner är inte ett förbiseende , utan är en del av koden design . Om detta är fallet , sedan se om funktionen kan delas in i flera funktioner som körs i serie , var och en med en lägre nivå av rekursion .
4
Bygg din egen stack . Gör detta genom att skapa en array som kommer att hantera variabler funktionen kräver att exekvera och sedan anropa funktionen i en loop . Genom att lagra dessa variabler och sedan anropa funktionen sekventiellt från en loop , kan du härma beteendet hos en rekursiv funktion utan förlitar sig på JavaScript stack beteende . Addera