0

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

var counter = {
  i: 0,
  increment: function () {i++;}
};

var counter = (function () {
  var i = 0;
  return {
    increment: function () {i++;}
  };
})();
4

1 に答える 1

1

関数が参照を返すことを選択しない限り、それを宣言した関数の外部からローカル変数にアクセスする方法はありません。Javascript には関数スコープしかなく、namespaceブロックを提供するバージョンがないため、これが他のコードから変数を隠す唯一の方法です。

ES6 で導入された他のスコープでは、ブロック スコープまたは理想的にはモジュール スコープを使用して、これを簡素化できます。

let i = 0;
export default {
  increment: function () {i++;}
};
于 2016-03-28T19:40:08.217 に答える