A reentrent Funktion ist eine Funktion, deren Ausführung wieder aufgenommen werden kann:
In Computing, ein Computerprogramm oder Unterprogramme einspringenden aufgerufen wird, wenn es in der Mitte seiner Ausführung unterbrochen werden kann und dann sicher erneut aufgerufen ("neu eingegeben"), bevor die vorherigen Aufrufe abgeschlossen sind.
Im Browser/Knoten JavaScript ist die gesamte Multiprocessing kooperativ (keine Interrupts oder Kontextwechsel). Eine reguläre Funktion wird immer in JavaScript ausgeführt. (1)
Also in Ihrem Fall - die einzige Reentrent-Funktion ist die erste, da es seinen Code nicht zum Abschluss führt und zu einem späteren Zeitpunkt wieder aufgenommen werden kann.
- Die zweite Funktion ist nur eine normale Funktion.
- Die dritte verwendet einen äußeren Bereich, der irgendwie ähnlich ist, weil es eine Funktion einen Zustand halten lässt. Es ist jedoch nicht das Gleiche, da die Funktion nicht fortgesetzt werden kann.
- Die vierte läuft gerade zur Vollendung sofort (es plant eine weitere Invokation davon - aber das ist bis die Plattform und nicht JavaScript).
der Tat - kann man sagen, dass Generatoren kooperatives Multitasking in JavaScript mit einer reentrent Syntax aktivieren. Vor den Generatoren lief der Code vollständig ab.
(1) Oder es wird nie angehalten, aber es wird nie unterbrochen. Auch - in gemeinsamen Plattformen. Es gibt Plattformen (wie Rhino), die die Regel brechen. Sie sind sehr selten und verwenden nicht das gleiche Parallelitätsausführungsmodell wie Browser/Node JS.
Siehe http://stackoverflow.com/questions/2799023/what-exactly-is-a-reentrant-function auch, es ist eine C++ verwandte Frage, aber die Antwort bleibt die gleiche. –
Für den Fall, dass sich jemand fragt - Es ist keine doppelte Frage, da es sich nicht um JavaScript handelt und C++ ein anderes Ausführungsmodell hat. –