什么';这两种JavaScript风格的区别是什么?

什么';这两种JavaScript风格的区别是什么?,javascript,coding-style,Javascript,Coding Style,我在JavaScript中见过几种样式。好奇它们在可读性、优化和变量范围方面的差异。赞成者和反对者将不胜感激 方法A: function MyObj(options) { this.options = options; } MyObj.prototype.getOptions = function() { return this.options; }; 方法B: var MyObj = (function() { function MyObj(options) { this

我在JavaScript中见过几种样式。好奇它们在可读性、优化和变量范围方面的差异。赞成者和反对者将不胜感激

方法A:

function MyObj(options) {
  this.options = options;
}
MyObj.prototype.getOptions = function() {
  return this.options;
};
方法B:

var MyObj = (function() {
  function MyObj(options) {
    this.options = options;
  }
  MyObj.prototype.getOptions = function() {
    return this.options;
  };
  return MyObj;
})();
有人曾经说过,包装器是用来处理IE中的命名函数的。我注意到,通过放置包装器,可以划分变量和对对象来说是静态的函数


然而,我也有很多抱怨,包装效率低或奇怪。CoffeeScript也可以编译成方法B。因此,当手工编写JS时,哪一种是最佳实践,什么时候应该将一种方法用于另一种方法?

第二种方法是使用模块模式。在这个简化的示例中,没有真正的区别,但是对于变量封装来说,第二个应该是首选的,另外它避免了不必要地污染全局名称空间