Nehmen wir an, wir haben Code, der zum Initialisieren von Dingen verwendet wird, wenn eine Seite geladen wird, und er sieht folgendermaßen aus:
function initStuff() { ...}
...
$(document).ready(initStuff);
Die initStuff-Funktion wird nur aus der dritten Zeile des Snippets aufgerufen. Nie wieder. Normalerweise setzen die Leute dies in einen anonymen Rückruf wie folgt:
$(document).ready(function() {
//Body of initStuff
});
Die Funktion an einer bestimmten Stelle im Code zu haben, hilft nicht wirklich bei der Lesbarkeit, da beim Aufruf von ready () deutlich wird, dass es sich um Initialisierungscode handelt.
Gibt es noch andere Gründe, einen dem anderen vorzuziehen?
coding-style
jquery
Martin N.
quelle
quelle
Antworten:
Wie bei @ Stargazer712 erwähnt, überfüllt der erste den globalen Namespace, sodass der zweite meiner Meinung nach der Gewinner ist. Da Sie im zweiten Beispiel eine anonyme Funktion verwenden, ist der Callstack Ihres Debuggers unbrauchbar und führt je nach verwendetem Debugger zu unterschiedlichen Ergebnissen. Normalerweise mache ich am Ende Folgendes:
Auf diese Weise wird der globale Namespace nicht unübersichtlich und Sie haben einen nützlichen Callstack.
Ich neige dazu, die obige Konvention in allen anonymen (naja, nicht mehr anonym;)) Funktionsdefinitionen zu verwenden. Dies ist eine Konvention, die ich beim Durchsuchen von Firefox JS-Code gefunden habe.
Bearbeiten: Nachdem Oliver das alles gesagt hat, bringt er einen guten Punkt mit Unit-Tests vor. Das Obige soll als Wrapper für komplexere Operationen dienen und nicht eine Tonne ungetesteten Codes enthalten.
quelle
Ich würde in diesem Fall sagen, dass es wahrscheinlich keine Rolle spielt, aber wenn Sie anonyme Rückruffunktionen haben und andere anonyme Rückruffunktionen aufrufen, tendiere ich dazu, den ersten Ansatz zu verwenden, da dadurch der Code viel lesbarer und leichter zu befolgen ist.
In Bezug auf Unit-Tests wäre der erste Ansatz besser, da Sie die
initstuff
Funktion isoliert testen könnten .quelle
Ich würde mich für den ersten entscheiden, für Lesbarkeit / Debugging / Testen usw. Sie können das Problem der globalen Namespace-Unordnung vermeiden, indem Sie einfach einen lokalen Namespace für alle Funktionen auf Ihrer Seite erstellen. Ich verwende den von Paul Irish empfohlenen Objektnotationsstil (siehe Folien 13-15 auf http://paulirish.com/2009/perf/ ).
quelle
Es gibt auch eine dritte Möglichkeit, Init-Methoden zu registrieren, ohne den globalen Namespace zu überladen, den ich bevorzuge:
Es ist kurz und vermeidet das Nachschlagen von DOM-Dokumenten
tut.
quelle
$
bevorzuge ich:jQuery(function($) {...});