2013-12-19 3 views
5

Lassen Sie uns die Google Analytics Universal-Skript als Prämisse der Praxis nehme ich zu klären suchen, zu validieren und/oder erweitern auf:Was sind die Vor- und Nachteile der Weitergabe * aller * Javascript Variablen (auch undefiniert) als Funktionsargumente?

<script> 
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 
</script> 

Google alle Variablen als Argumente gewählt hat, anstatt sie mit erklärt passieren var. Der klare Vorteil in diesem Fall ist, den Code auf ein Maximum zu minimieren (das var Schlüsselwort im Bereich und = Zeichenwiederholungen zu vermeiden) mit a und m undefined ... Während es üblich ist, eine vorhandene Variable als Argument übergeben, oder ein Objekt in den Gültigkeitsbereich, wobei undefinierte Variablen als Argument übergeben werden, um deren Deklaration zu überspringen, ist ziemlich ungewöhnlich.

Ich bin interessant zu wissen, ob es bekannte Vorbehalte mit diesem Ansatz gibt. Besonders:

Ist diese Verwendung mehr oder weniger Speicher, oder ist es das entspricht erklärt Vars im Funktionsumfang?

Macht es einen Unterschied in Bezug auf den Garbage Collector machen, und wie so?

Und hat eine erhöhte oder umfangreiche Menge an übergebenen Argumente zu einer Funktion keine Nachteile in Bezug auf die Leistung haben?

Zusätzliche Anmerkungen: Bitte, KEINE ANTWORT. Ich bin nicht interessiert an Meinung basiert Antworten. Die Frage betrifft auch nicht das Übergeben des Objektbereichs, wie bereits beantwortet unter: https://stackoverflow.com/a/4665324/1647538. Bitte antworten Sie nicht für diesen speziellen Aspekt.

Ich bin nur die Suche nach überprüfbaren faktenbasierte Antworten von Javascript erfahrenen Experten oder Browser-Implementierer, mit umfangreichem Wissen von Javascript-Compiler und wie Müllsammler arbeiten.

+1

Ich glaube nicht, dass die * geheime Antwort *, nach der Sie suchen, wirklich existiert. Es ist nur eine Minimierung. - Unter http://jsperf.com/ können Sie einen Geschwindigkeitstest durchführen, um herauszufinden, ob es einen Leistungsunterschied gibt. - Verwenden Sie dieses auch niemals in Ihrem ursprünglichen Quellcode. Der negative Einfluss auf die Lesbarkeit negiert * jeden * möglichen Leistungsgewinn. – vbence

+0

@vbene Es ist keine geheime Antwort. Es geht um Müllsammler und Speicherverbrauch Fakten. Ich habe keinen Nutzen für Meinungen in der Sache. Ich will nur rohe Fakten. Ich bin nicht daran interessiert, was andere denken, ich sollte damit machen, oder ob es wichtig sein sollte. Das ist nebensächlich meine Frage. – hexalys

+0

Müllsammler ist ziemlich spezifisch für Ihre JS-Engine. Was in einem Browser hilft, kann die Leistung in anderen beeinträchtigen. - Außerdem ist die Abweichung vom Mainstream-Coding-Stil niemals gut, selbst wenn sie kurzfristig helfen, werden JS-Engines optimiert, um besser mit den Praktiken umgehen zu können, die in 90% der Webseiten verwendet werden. - Wenn Sie wirklich eine spezifische Antwort zu dieser Frage erhalten möchten, können Sie immer die Quelle der meisten populären Engines überprüfen. – vbence

Antwort

1

Nicht sicher diesem Fall speziell, aber Objekte wie Fenster und Dokumenten-Injektion anstatt sie direkt aus dem Inneren einer Funktion Referenzierung können Sie Mock-Objekte während der Unit-Tests bestehen.

+0

Ja, ich weiß. Ich habe dieses "Objekt in den Geltungsbereich" aufgenommen. Die Variablen im Kontext sind hier "String" -Variablen und deklarieren im Wesentlichen "undefinierte" Args als Substitute zum Deklarieren von Vars im lokalen Gültigkeitsbereich. Aber aus welchen Gründen auch immer, die Leute stimmen stark ab, um diese Frage zu schließen, selbst wenn es Upvotes und Interesse an der Antwort gibt. Ich verstehe wirklich nicht, warum das so ist ... – hexalys