Есть ли веская причина для обертывания дополнительной непосредственной функции вокруг определения модуля requirejs?
-
26-10-2019 - |
Вопрос
Я смотрел на шаблонные пластины на Github, я вижу два разных типа реализации.
https://github.com/david0178418/backbonejs-amd-boilerplate/blob/master/src/js/views/viewstub.js имеет следующее как 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;
}
});
}
);
})();
В то время как просмотр из другого шаблонаhttps://github.com/jcreamer898/requirejs-backbone-starter/blob/master/js/views/view.js имеет следующее:
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();
});
Мой вопрос здесь:Почему в первом примере существует самостоятельная функция во всем модуле requirejs?
Решение
В этом примере не должно быть закрытого закрытия. Это создает область, так что объявленные переменные или функции не протекают в глобальную область. Но когда вы не создаете переменные или именованные функции, тогда утечь нечего. Так что этого не так уж много.
Реальная причина может быть проще, чем вы думаете. Как и использование поворота, даже если никто не находится рядом, заключение каждого исходного файла JS в функцию самостоятельного выполнения - хорошая привычка. Это спасает вас от глупых ошибок. Так что это может быть просто примером защитного стиля программирования.
В этом примере нет пользы, но связанная с этим стоимость производительности во время выполнения совершенно незначительна. Так почему бы не сделать это «правильным» способом на случай, если придет кто -то новый, и «поддерживает» этот модуль каким -то причудливым способом?
Другие советы
В этом нет смысла делать это, потому что у вас уже есть функция, которая создает свои собственные пространства имен.
Более того, есть недостаток - вы получаете дополнительное отступ, поэтому ваш код становится менее читабельным.