De sleutel tot vaststelling van een " ruimte in stack ' fout , ook meer algemeen bekend als een stack overflow error , is om eerst te begrijpen wat het betekent . Wanneer een functie wordt aangeroepen in JavaScript , worden de functie en de variabelen gekopieerd naar het geheugen van wat de stack genoemd . Als dat functieaanroepen andere functie ( of ook dezelfde functie ) , dan is het kind functie wordt ook toegevoegd aan de stack . Als deze vorm van recursieve roeping van de functies van de grens voor recursie die wordt gedefinieerd door de browser overschrijdt , dan is JavaScript zal een stack overflow error terug . Instructies Controleer 1 voor een oneindig looping functie . Dit is de eenvoudigste en meest voorkomende oorzaak van een stack overflow fout . Wanneer een functie noemt zichzelf , gebruiken voorwaardelijke verklaringen ervoor te zorgen dat de functie kan nooit lus zich in een overflow error . Gebruik een teller variabele of een initialisatie variabele , of kijk op de waarde van een variabele die wordt gemanipuleerd door de functie om te bepalen of het al is uitgevoerd . Kopen van 2 Controleer voor twee of meer functies die elkaar bellen andere om een oneindige lus te vormen . Wanneer een functie roept een ander , zich ervan bewust dat als de tweede functie roept weer de eerste , kan het mogelijk zijn om de code te lus binnen die functies . Maar kan ook met meer dan twee functies , en het kan veel moeilijker te herkennen dan een looping functie . De oplossing is dezelfde in beide richtingen : Gebruik voorwaardelijke verklaringen om de code te beschermen tegen looping oneindig 3 Controleer voor hoge niveaus van recursie die nodig zijn voor een functie uit te voeren . . Soms diep recursieve functies zijn niet een vergissing , maar maken deel uit van het ontwerp van de code . Als dit het geval is , dan zien of de functie kan worden opgesplitst in meerdere functies die worden uitgevoerd in serie , elk met een lager niveau van recursie . 4 Bouw je eigen stack . Doe dit door het creëren van een array die de variabelen van de functie vereist om de functie uit te voeren en dan bellen binnen een lus zal beheren . Door het opslaan van deze variabelen en daarna achtereenvolgens het aanroepen van de functie van een lus , kunt u het gedrag van een recursieve functie imiteren zonder te vertrouwen op van JavaScript stack gedrag.
|