Ich habe eine Funktion, die sich bei der Fertigstellung mit setTimeout() selbst aufstellt. Könnte jemand erklären, warum Chrome DevTools es so aussehen lässt, als würde es sich selbst rekursiv aufrufen? Mein Verständnis ist der Call-Stack sollte bei jedem Aufruf klar sein.Warum stört setTimeout() meine Anrufliste unter Chrome DevTools?
Nehmen Sie dieses sehr einfaches Beispiel:
<html>
<head>
<script>
function main() {
setTimeout(main, 100); // set breakpoint here
}
main();
</script>
</head>
<body></body>
</html>
Das erste Mal, wenn der Haltepunkt sehe ich getroffen wird:
Nach 3 weiteren Iterationen ich sehen:
Firefox-Entwickler-Tools tun, was ich erwarte und zeigt nur eine Instanz der Funktion auf dem Stapel jedes Mal, wenn der Haltepunkt getroffen wird.
Gibt es irgendeine Art von subtilem Hinweis Capture unter Chrome geht, dass ich nicht bewusst bin, oder ist das nur ein DevTools UI Ding?
Es ist nur Devtools UI. Sie können sehen, dass der Callstack nur 1 tief ist, aber Sie sehen, wo der aktuelle Anruf in die Warteschlange eingereiht wurde. Das ist sehr nützlich, um herauszufinden, warum eine Funktion ausgeführt wird, und den Kontext, in dem sie aufgerufen wurde –
Danke @FredStark. Ich kann das Dienstprogramm sehen, aber gibt es irgendeinen Weg zu verhindern, dass die Call-Stack-Liste in Unendlichkeit wächst, während mein Programm läuft? (ohne Async-Stack-Traces auszuschalten) – rkagerer