IIFEに関する記事を読んでいますが、それがもたらす主な価値は、以下のコードで "i" を IIFE に配置すると変更できないという意味で、変数のプライバシーを作成することだと思います。しかし、名前空間はどうですか?「カウンター」のスコープに変数が含まれている場合、2つにどのような違いがありますか?
var counter = {
i: 0,
increment: function () {i++;}
};
var counter = (function () {
var i = 0;
return {
increment: function () {i++;}
};
})();