# These are equivalent
_.defer(fn);
setTimeout(fn, 1);
So ist defer
einfach eine Millisekunde setTimeout
. (Es ist noch ein paar Komfortfunktionen bekam aber die sind hier nicht wichtig.)
JavaScript Schleifen gelaufen ist. Es ist single-threaded, aber seine Ausführung startet und stoppt basierend auf Ereignissen oder Timern. Jedes Mal, wenn Ihre JS-Engine startet, um Code auszuführen, startet sie eine Iteration ihrer Ausführungsschleife.
Also was defer
tut, ist sagen "diesen Code in der nächsten Laufschleife ausführen".
_.defer(function() { alert('after'); });
alert('before');
Diese Warnung "vor" und dann "nach". Dies liegt daran, dass die aktuelle Run-Schleife abschließt, welche Alerts "vor" sind, und gleich danach startet eine neue Run-Schleife und führt den Code die Alerts "nachher" aus.
Also immer wenn Sie Code hier haben, aber Sie möchten, dass Code ausgeführt wird, der nach diesem Code zuerst auftritt, dann würden Sie defer
verwenden.
_.defer(functionToRunLast);
functionToRunFirst();
Dies kann mit dem DOM praktisch sein. Manchmal ändern Sie es, aber die Änderungen werden nicht sofort analysiert oder gerendert. Am Ende der Ausführungsschleife holt der Browser auf und parst und rendert das DOM, dann startet die nächste Ausführungsschleife und kann mit dem neu gerenderten DOM interagieren.
(Genau das, was Szenarien verursachen diese DOM Parse verzögert, ich bin nicht sicher, aber ich habe es in meinen eigenen Projekten in der Vergangenheit bemerkt.)
Es ist NICHT ein Ersatz für DOM ready. Die nächste Laufschleife kann passieren vor DOM bereit immer feuert, diese Konzepte nicht zu verwechseln.
Nun, was macht '_delay'? Darin liegt die Antwort. –
scheint es für 1 Millisekunde zu warten. Ich verstehe immer noch nicht, wie das weiß, dass bestimmte Elemente gerendert werden usw. Vielleicht benutze ich es falsch? – cesara
Es kann hilfreicher sein, wenn Sie ein Beispiel für einen Ort posten, den Sie 'defer' verwenden mussten und warum nicht. –