2012-03-23 5 views
1

wenn das Modul Muster in js ive Mitteilung mit, dass die wichtigsten Vorteile sind private Mitglieder und nicht den globalen Namensraum unübersichtlich, aber was ich wissen wollte, ist dies:verwendet window.onload zum Ausführen einer anonymen Funktion das gleiche Grundprinzip wie das Modulmuster?

(function(){ 
    //some code... 
})(); 

die gleiche wie folgt aus:

window.onload = function(){ 
    //some code... 
} 

Beide bieten private Mitglieder und beide nicht den globalen Namespace. Der einzige Unterschied, den ich feststellen kann, ist, dass, wenn beide DOM-Elemente manipulieren, der zweite irgendwo im Dokument (wegen document.onload) aufgerufen werden kann, während der erste am unteren Ende des Body-Knotens oder direkt nach dem Nähe des Körperknotens.

Gibt es irgendwelche anderen Unterschiede zwischen den beiden, die ich vermisse?

Antwort

1

Ein wichtiger Unterschied besteht darin, dass der letzte vorhandene window.onload, der möglicherweise früher auf der Seite — festgelegt wurde, überschreibt und dieser wiederum von allen späteren überschrieben wird. (Dies kann durch die Verwendung von window.addEventListener stattdessen adressiert werden.)

+0

wow ich weiß nicht, warum ich das nicht gesehen habe, so das Modul Muster ist eine Ebene über einem anonymen window.onload Ausführung bedeutet, dass Sie mehr als 1 haben können? – zero

+0

Nun, Sie verwenden den Ausdruck "Modulmuster" nicht korrekt. Aber ja, '(function() {...})();' führt die Funktion sofort aus - abgesehen von Scoping-Problemen ist es, als würde man '...' direkt in Ihr Skript einfügen - so können Sie diese Syntax verwenden beliebig viele Male auf einer Seite, so wie Sie die Syntax 'alert (' ... ')' oder die Syntax 'var ... = ... 'mehrmals auf einer Seite verwenden können. – ruakh

+0

"Nun, Sie verwenden den Ausdruck" Modulmuster "nicht richtig" gibt es viel mehr zu der Grundlage dieses Musters? – zero

Verwandte Themen