setTimeout() auf rekursive Funktion innerhalb einer sich selbst aufrufenden Funktion
Will ich verteilen meinen code als selbst-envoking anonyme Funktionen, so wie ich das sehe viele tun. Auch, in meinem code habe ich zum überwachen einer anderen lib laden, so kann ich es verwenden, wenn es verfügbar ist.
(function(window, document, undefined) {
staffHappens();
var initMyLib = function() {
if (typeof(myLib) == 'undefined') {
setTimeout("initMyLib()", 50);
} else {
useMyLib();
}
}
moreStaffHappens();
initMyLib(); //-> initMyLib is undefined
})(this, document);
Wie kann dieser Fehler auftreten? Sollte initMyLib im Umfang des umschließenden (selbst-envoking) - Funktion?
InformationsquelleAutor user967722 | 2012-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
ändern
setTimeout("initMyLib()", 50);
zusetTimeout(initMyLib, 50);
Beim übergeben wird ein string als argument übergeben wird, versuchen Sie es zu bewerten, wenn der timeout ausgelöst wird, aber es laufen wird, im globalen Bereich. Und Ihre Methode existiert nicht im globalen scope.
Demo auf http://jsfiddle.net/gaby/zVr7L/
undefined
obwohl...nicht, es sollte nicht, aber sind Sie sicher, dass die
undefined
Teil kommt aus dieser Zeile und nicht eine Ausführung der timeout-Skript ?Ich weiß es nicht. Das ist die Linie, die er gesagt hat, es geschieht so ich bin herauszufinden, die er getan debugging Figur, die viel aus... Das war das erste, was ich dachte, aber wenn Sie es ist, die in der angegebenen Zeile und nicht in der timeout, dann bin ich nicht sicher, ob dies richtig ist. Ich war nur lautes denken
gut es funktioniert gut in meinen tests hat ... also denke ich, es ist ein Fehler in der Beschreibung des Problems 🙂
Hie. Was ist, wenn ich will, um die übergabe von Argumenten an die Funktion ? Wenn ich so tun , Es gibt mir eine unendliche Rekursion.
InformationsquelleAutor Gabriele Petrioli
Lesen Sie diese Antwort für einige Hinweise: rekursive Funktion vs setInterval vs setTimeout javascript
Dies ist der Beispielcode aus, die Antwort:
InformationsquelleAutor ire-a
Könnten Sie auch eine echte anonyme Funktion zu vermeiden scoping Probleme:
arguments.callee
ist veraltet, in den letzten javascript-Versionen, Sie sollten vermeiden Sie es und verwenden Sie den vorgeschlagenen Namen Funktionen.. könnte Dies auch getan, mit(function name() {
und verwenden Sie dannsetTimeout(name, 50);
aka G. Petrioli: ich weiß. Dennoch
callee
ist ein nettes feature Wissenswerte über.in der Tat ist es...
InformationsquelleAutor georg