是否有充分的理由围绕requireJS模块定义包装一个额外的无限调用函数
Is there a good reason for wrapping an extra immedeately-invoked function around a requireJS module definition?
我在GitHub中查看了Backbone requireJS样板,我看到了两种不同类型的实现。
https://github.com/david0178418/BackboneJS-AMD-Boilerplate/blob/master/src/js/views/viewStub.js具有以下视图Stub:
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源文件封装在一个自执行函数中是一个很好的习惯。它使你免于犯愚蠢的错误。因此,它可能只是防御性编程风格的一个例子。
这个例子没有任何好处,但运行时的相关性能成本完全可以忽略不计。那么,为什么不以"正确"的方式来做,以防有新的人进来并以一些时髦的方式"维护"这个模块呢?
这样做完全没有意义,因为您已经有了一个创建自己名称空间的函数。
此外,还有一个缺点——你得到了一个额外的缩进,所以你的代码变得不那么可读。
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟