node.js模块是否需要包装在模块模式中?

Ita*_*man 29 module node.js

为了确保正确的隔离,我倾向于包装我在函数范围内编写的每个node.js模块:

(function() {
  var express = require('express');
  var jade = require('jade');
  var moment = require('moment');

  exports.someFunction = function() {
    // do something    
  };

  exports.otherFunction = function() {
    // do something else
  };
})();
Run Code Online (Sandbox Code Playgroud)

我已经这样做了一段时间,但我觉得node.js的模块系统实际上是为我做的,或者(换句话说)上面的代码等同于以下代码:

var express = require('express');
var jade = require('jade');
var moment = require('moment');

exports.someFunction = function() {
  // do something    
};
exports.otherFunction = function() {
  // do something else
};
Run Code Online (Sandbox Code Playgroud)

两者真的相同吗?特别是,我想知道是否被隔离级别是相同的:都是express,jademoment局部变量的模块?(即,我想确保它们未在全局范围内定义或干扰此模块之外的任何其他定义).

Jam*_*ice 38

模块中声明的变量是该模块的本地变量.省略封闭功能是安全的.

来自Node.js文档:

模块本地的变量将是私有的,就好像模块包含在一个函数中一样