-1

2 組のシナリオをテストしていました。

1.) グローバル変数を引数として渡します...

(function(d){
   //do some stuff with d
   return //something
})(document);

...またはローカル変数にグローバルを割り当てます。

(function(){
   var d = document;
   //do the same stuff
   return //something
})();

結果は、ブラウザーごと、バージョンごと、さらにはテストごとに異なります。

2.) XMLHttpRequest を介して取得した大きなデータ オブジェクトがあります。このオブジェクトはいくつかのメソッドによってアクセスされますが、親関数のスコープに関連するのは 1 つだけです。

(function(){
   //get data object
   var data = response;
   //change GUI, assign events, do some other stuff
   var searchInData = function(id){ //this will be used often
      //code
   };
   //data object won't be accessed any more
   //a lot of code
   return //something
})();

...またはこれを使用するには?

(function(){
   var search = (function(){
      var data = response;
      //change GUI, assign events, do some other stuff
      return function(id){
         //code
      }
   })();
   //other stuff
   return //something
})();

繰り返しますが、明確な結果を得ることができませんでした: どちらを使用するか、なぜ、いつ使用しますか?

4

1 に答える 1

2

1 結果はブラウザごと、バージョンごと、さらにはテストごとに異なります!

次に、読みやすいと思われるものを使用します。たとえば、オプション #1 は記述が少なくなりますが、説明的なパラメーターがないと、長い関数を理解するのが難しくなります (変数の内容を確認するには、下にスクロールする必要があります)。

2 閉鎖を使用しますか?

//a lot of codeが該当すると思います。どちらの関数もそのコードのスコープ内の変数にアクセスでき、クロージャーを使用しない場合 (オプション #2)、多くのコードにはスコープ内のローカル変数があります。クロージャを使用すると、ブラウザはガベージ コレクションを最適化し、メモリ管理を改善できる可能性があります。ただし、これは実際の内容に依存し//other stuffます。非同期コードの場合は、クロージャーをお勧めします。

于 2013-01-18T10:03:53.457 に答える