Gibt es einen guten Grund, eine extra unmittelbar gesteuerte Funktion um eine Definition des RequiredJS-Moduls zu wickeln?

StackOverflow https://stackoverflow.com/questions/8813215

Frage

Ich habe mir die Backbone-Requirejs-Kesselplatten in GitHub angesehen. Ich sehe zwei verschiedene Arten von Implementierungen.

https://github.com/david0178418/backbonejs-amd-boilerplate/blob/master/src/js/views/viewstub.js hat die folgende als ViewStub:

function() {
    "use strict";

    define([
            'jqueryLoader',
            'underscore',
            'backbone',
        ],
        function($, _, Backbone) {

            return Backbone.View.extend({
                template : _.template(/*loaded template*/),

                initialize : function() {
                    this.render();
                },

                render : function() {
                    $(this.el).append(this.template(/*model/collection*/));

                    return this;
                }
            });
        }
    );
})();

Während der View-Stub aus der anderen Kesselplattehttps://github.com/jcreamer898/requirejs-backbone-starter/blob/master/js/views/view.js hat die folgenden:

define([
        'jquery', 
        'backbone',
        'underscore', 
        'models/model',
        'text!templates/main.html'], 
function($, Backbone, _, model, template){
    var View = Backbone.View.extend({
        el: '#main',
        initialize: function(){
            this.model = new model({
                message: 'Hello World'
            });
            this.template = _.template( template, { model: this.model.toJSON() } );
        },
        render: function(){
            $(this.el).append( this.template );
        }
    });

    return new View();
}); 

Meine Frage hier ist:Warum gibt es im ersten Beispiel eine Selbstausnahmefunktion im gesamten Anforderungsmodul?

War es hilfreich?

Lösung

In diesem Beispiel muss kein Verschluss vorhanden sein. Es schafft einen Bereich, so dass deklarierte Variablen oder Funktionen nicht in den globalen Bereich eintreten. Wenn Sie jedoch keine Variablen oder benannten Funktionen erstellen, gibt es nichts zu lecken. Es gibt also nicht viel Punkt.

Der wahre Grund kann einfacher sein als Sie denken. Wie bei der Verwendung des Blinkers auch dann ist es eine gute Angewohnheit, jede JS -Quelldatei in eine selbst ausführende Funktion einzuschließen. Es rettet dich vor dummen Fehlern. Es kann also nur ein Beispiel für einen defensiven Programmierstil sein.

In diesem Beispiel gibt es keinen Nutzen, aber die damit verbundenen Leistungskosten zur Laufzeit sind völlig vernachlässigbar. Warum also nicht die "richtige" Art und Weise, falls jemand ein Neues hereinkommt und dieses Modul auf funky Weise "pflegt"?

Andere Tipps

Es macht keinen Sinn, dies zu tun, da Sie bereits eine Funktion haben, die seine eigenen Namespaces erstellt.

Darüber hinaus gibt es einen Nachteil - Sie erhalten einen zusätzlichen Einsatz, sodass Ihr Code weniger lesbar ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top