¿Existe una buena razón para envolver una función extra de inmediato en torno a una definición del módulo Requirjs?

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

Pregunta

Estaba mirando las calderas Backbone-Requirejs en GitHub, veo dos tipos diferentes de implementaciones.

https://github.com/david0178418/backbonejs-amd-boilerplate/blob/master/src/js/views/viewstub.js Tiene lo siguiente como 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;
                }
            });
        }
    );
})();

Mientras que el stub de vista de la otra caldererahttps://github.com/jcreamer898/requirejs-backbone-starter/blob/master/js/views/view.js tiene lo siguiente:

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();
}); 

Mi pregunta aquí es:¿Por qué hay una función de auto-ejecución en todo el módulo RequestJS en el primer ejemplo?

¿Fue útil?

Solución

No es necesario que contenga un cierre en este ejemplo. Crea un alcance para que las variables o funciones declaradas no se filtren en el alcance global. Pero cuando no está creando variables o funciones con nombre, entonces no hay nada que filtrarse. Entonces no hay mucho sentido.

La verdadera razón puede ser más simple de lo que piensas. Como usar la señal de giro, incluso si no hay nadie cerca, encerrar cada archivo fuente JS en una función de autocuración es un buen hábito para meterse. Te salva de estúpidos errores. Por lo tanto, puede ser un ejemplo de un estilo de programación defensivo.

No hay ningún beneficio en este ejemplo, pero el costo de rendimiento relacionado en el tiempo de ejecución es totalmente insignificante. Entonces, ¿por qué no hacerlo de la manera "correcta" en caso de que alguien nuevo entra y "mantiene" este módulo de alguna manera funky?

Otros consejos

No tiene sentido hacer esto, porque ya tienes una función que crea sus propios espacios de nombres.

Además, hay una desventaja: está obteniendo una sangría adicional, por lo que su código se vuelve menos legible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top