3

ループ内の一時変数について、パフォーマンス面でのベスト プラクティスは何ですか? 次のようなことをする方が良いですか:

some_array.forEach(function(item) {
  var temp_obj = {};
  // do some operations with temp_obj
});

また

var temp_obj;
json.forEach(function(item) {
  temp_obj = {};
  // do some operations with temp_obj
});

パフォーマンスに違いはないといつも思っていましたが、使用するたびに、良い慣行に従っているかどうかわかりません...

4

4 に答える 4

1

達成しようとしているスコープにすべて依存する良いプラクティスはありません。

ループ内では、ループ外では var にアクセスできません。クロージャーに関連して得られるものは他にもいくつかあります。たとえば、1 つのリソース

于 2013-11-14T19:11:56.423 に答える
0

これは実際には興味深い質問です。主な理由は、JavaScript がスコープを処理する方法にあります。この質問は以前に回答済みであるというコメントがいくつかありますが、私にはそうではないようです。これには大きな違いがあることに注意してください。

for(var i = 0; i < someArray.length; i++){}

この:

someArray.forEach(function(item){});

2 番目のコールバックがスコープを提供するためです。for ループを使用している場合、関数の内部または外部で変数を宣言するかどうかは文字通り問題ではありません。変数はとにかくループから引き上げられるからです。

具体的に質問している場合、関数はスコープを提供し、変数は巻き上げられないため、関数の内部または外部で変数を宣言するかどうかが重要です。変数は 1 回しか作成されないため、パフォーマンスを重視する場合は、コールバックの外で宣言する必要があります。ただし、コールバックの外で変数を使用する必要がない場合は、実際にはコールバック内で変数を定義することをお勧めします。私の意見では、これによりコードが読みやすくなり、一時オブジェクトが非常にメモリを消費しない限り、パフォーマンスに顕著な影響を与えることはありません。

于 2013-11-14T19:28:47.240 に答える