JavaScript: зачем использовать IIFE для определения экземпляра объекта (также известного как «класс»)?

Я играл с TypeScript и заметил, что он следует определенному стилю с JS.

Следующий TypeScript:

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

Генерирует JS следующим образом:

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

В чем преимущество IIFE? Зачем мне привязывать свои методы к моему прототипу в новой области видимости?

Потеряю ли я что-нибудь, если продолжу делать:

function Greeter(message) {
    this.greeting = message;
}
Greeter.prototype.greet = function () {
    return "Hello, " + this.greeting;
};

(как я всегда делал) вместо этого?


person mikemaccana    schedule 28.03.2014    source источник
comment
@ jfriend00 Да, я согласен, ответ на этот вопрос идеально подходит.   -  person mikemaccana    schedule 28.03.2014
comment
Я недостаточно знаком с TypeScript, чтобы сказать, но может случиться так, что иногда он будет добавлять дополнительное локальное состояние, и для простоты он просто использует одну и ту же структуру IIFE независимо от того, присутствуют ли условия, требующие локального состояния.   -  person Chuck    schedule 28.03.2014