Javascript 最佳实践:全局对象与模块

Javascript 最佳实践:全局对象与模块,javascript,javascript-objects,Javascript,Javascript Objects,我目前正在做一个项目,看到了下面的代码,这些代码用于在窗口对象中存储每个“模块”。多年来,我做了大量的Javascript,从我对最佳实践的理解来看,您希望避免污染全局名称空间。这会被认为是对全局名称空间的污染吗 (function (global) { "use strict"; // Public methods. var exports = {}; /* * Some other configuration / members *

我目前正在做一个项目,看到了下面的代码,这些代码用于在窗口对象中存储每个“模块”。多年来,我做了大量的Javascript,从我对最佳实践的理解来看,您希望避免污染全局名称空间。这会被认为是对全局名称空间的污染吗

(function (global) {
    "use strict";

    // Public methods.
    var exports = {};

    /*
    * Some other configuration / members
    *
    */

    global.Helper = exports.members;
    return exports;

}(window));
我习惯于使用模块模式来构造Javascript

下面的例子

var module = (function () {

    var defaultOptions = {
        //some options
    };

    var init = function (options) {
        defaultOptions = $.extend(defaultOptions, options, false);

    };

    /*
    * More code
    *
    */

    //public functions
    return {
        init: init
    }


})();
从最佳实践的角度来看,我的理解是正确的还是完全错了


将每个模块存储在窗口对象中是可以接受的做法吗?

我认为最好将模块放在全局空间中,因为将使用您的模块的每个人都将被迫将其仅与窗口变量一起使用

另一个原因-是否始终定义窗口对象


所有著名的JavaScript模块都是在全局范围内定义的:jquery、prototype、yii等。

“因此避免在全局名称空间中存储任何内容”--但是
var模块
是在全局空间中定义的。公正的评论、重新编写的帖子您必须在全局名称空间中放置一些内容,否则应用程序将无法使用它。但是,通过对整个名称空间使用单个名称,并对每个模块使用名称空间中的属性,可以最大限度地减少污染。就像所有jQuery插件都是
$一样。有些东西
。我认为zerkms的观点是,在运行第二个代码段之后,您就有了
window.module==={init:function{…}