Kann diese Funktion müllsammeln?

Betrachten Sie dieses Stück Kuchen ... ehm, Code:

'use strict'

function doWork () {
  return new Promise(function (resolve, reject) {
    // work work work...
    // Done! But... where's the resolve() ???
  })
}

doWork().then(function doMoreWork () {
  // Some more work to do...
})

Wenn die Funktion im Konstruktor des Versprechens beendet ist ...

Ist derPromise Objekt Müll-Sammler?IstdoMoreWork() Müllsammler?

Meine Vermutung ist, dassdoMoreWork() kann nicht direkt GC-ed werden, da das Promise einen Verweis darauf enthält. Sobald der Promise-Body beendet ist und der Ausführungskontext auf den oberen (?) Bereich zurückgesetzt wird, wird der Stapel abgebrochen (da hier keine weiteren Anweisungen ausgeführt werden müssen). und die Verheißung wird unerreichbar, so dass Müll gesammelt werden kann.

Können Sie bestätigen, dass ich dieses Thema richtig verstanden habe?

Wie kann ich dieses Verhalten empirisch beobachten? Mit anderen Worten, wie kann ich überwachen, welche Objekte wann gc-bearbeitet werden? Ich entwickle nur in Node.js, wenn das einen Unterschied macht.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage