Почему CoffeeScript заключает определения классов в замыкание?

В CoffeeScript,этот:

class Foo
  method: (x) ->
    x+1

Компилируется в:

// Generated By CoffeeScript
Foo = (function() {
  function Foo() {}
  Foo.prototype.method = function(x) {
    return x+1;
  }
  return Foo;
})()

Который кажется немного чрезмерным. Следующее должно бытьfunctionally identical:

// Generated by Dave
function Foo() {}
Foo.prototype.method = function(x) {
    return x+1;
}

What is the motivation for the extra "closure" wrapper?

Это не просто праздный вопрос стиля; это имеет значение для общего размера кода.

Версия Coffee преобразуется в 84 байта:

Foo=function(){function e(){}return e.prototype.method=function(e){return e+1},e}();

Моя версия уменьшается до 61 байта:

function Foo(){}Foo.prototype.method=function(e){return e+1};

23 bytes is silly kinds of irrelevant, but in a project with many many classes, overhead begins to add up.

Хорошо, я написал ответ ниже, опровергающий теорию размера байта ... для любого разумного класса метод Coffee будет меньше.

Возможно, есть и другие причины. Помоги мне подумать о них.

Ответы на вопрос(4)

Ваш ответ на вопрос