javascript - 在 requireJS 模块定义周围包装一个额外的即时调用函数是否有充分的理由?

标签 javascript backbone.js requirejs

我查看了 GitHub 中的 Backbone-requireJS 样板,我看到了两种不同类型的实现。

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

而来自其他样板的 View stub 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 源文件封装在一个自执行函数中是一个养成的好习惯。它使您免于犯愚蠢的错误。所以它可能只是防御性编程风格的一个例子。

此示例没有任何好处,但运行时的相关性能成本完全可以忽略不计。那么,为什么不以“正确”的方式来做,以防万一有新人进来并以一些时髦的方式“维护”这个模块呢?

关于javascript - 在 requireJS 模块定义周围包装一个额外的即时调用函数是否有充分的理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813215/

相关文章:

javascript - 使用扩展语法而不是 for 循环

javascript - Backbonejs模型.save()的PUT和POST请求

javascript - 是否可以将 SYSTEMJS 与 REQUIREJS 结合起来?

javascript - 回发后防止页面滚动并保持位置

javascript - 在运行时在javascript数组中添加对象

javascript - 扩展 Backbone.Collection 原型(prototype)

javascript - 通过将指定的 el 传递到 subview 实例化中,将 View 渲染到父 div 中

javascript - 第一次加载主干 View 时出现问题

requirejs - 在页面和 r.js 优化器之间使用相同的 require-config 文件?

javascript - 如何访问另一个文件中函数的状态