Dlaczego CoffeeScript zawija definicje klas w zamknięciu?

W CoffeeScript,to:

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

Kompiluje do:

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

Co wydaje się nieco przesadne. Następujące powinny byćfunkcjonalnie identyczny:

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

Jaka jest motywacja dla dodatkowego opakowania „zamykającego”?

To nie jest tylko bezczynna kwestia stylizacji; ma wpływ na ogólny rozmiar kodu.

Wersja Coffee zawiera 84 bajty:

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

Moja wersja zawiera tylko 61 bajtów:

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

23 bajty są głupimi rodzajami nieistotnymi, ale w projekcie z wieloma klasami narzut zaczyna się sumować.

Ok, napisałem odpowiedź poniżej obalając teorię wielkości bajtów ... dla każdej rozsądnej klasy metoda kawy będzie mniejsza.

Prawdopodobnie są też inne powody. Pomóż mi o nich myśleć.

questionAnswers(4)

yourAnswerToTheQuestion