Warum bricht CoffeeScript Klassendefinitionen in einen Closure ein?

In CoffeeScript wirddiese:

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

Kompiliert zu:

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

Welches scheint ein bisschen übertrieben. Folgendes sollte seinfunktional identisch:

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

Was ist die Motivation für die zusätzliche "Closure" -Verpackung?

Dies ist nicht nur eine müßige Frage des Stylings; Dies hat Auswirkungen auf die gesamte Codegröße.

Die Coffee-Version ist auf 84 Bytes begrenzt:

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

Meine Version minimiert sich auf nur 61 Bytes:

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

23 Bytes sind dumme Dinge, die irrelevant sind, aber in einem Projekt mit vielen, vielen Klassen beginnt sich der Overhead zu summieren.

Ok, ich habe eine Antwort unten geschrieben, in der die Theorie der Bytegröße widerlegt wird. Für jede vernünftige Klasse wird die Coffee-Methode kleiner sein.

Es gibt wahrscheinlich auch andere Gründe. Hilf mir, an sie zu denken.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage