6

fs.stat()例として、非同期ノード関数を取り上げます。ファイルで使用する必要がある場合はfs.stat()、後でもう一度実行すると、結果が影になります。

fs.stat(file, function(err, stats) {
  fs.stat(file, function(err, stats) {
  });
});

err変数だけでなく、変数statsもシャドウされます - これは、2 番目のコールバック内で最初のコールバックを使用しない場合でも問題になりますか? 2 番目のコールバック変数の名前を変更することをお勧めしますか?

これらの変数を 1 回または複数回上書きすると、パフォーマンスに影響がありますか?

4

2 に答える 2

6

意見の問題ですが、私はそう思います-悪い習慣です。いずれにせよ、ここには2つの問題があります

  • このコードで作業する必要がある次の人 (あなたかもしれません) を混乱させる可能性があります。

  • 将来、いくつかの新しい機能を提供するために、外部の値にアクセスする必要があるかもしれません (たとえば、2 つのファイル オブジェクトが同じタイプであることを確認したい場合など)。その変更を行うには、コード ブロック全体の面倒でエラーが発生しやすい編集が必要になります。

後で問題が発生しないように、ここで別の名前を使用してください。

于 2013-03-10T18:21:06.477 に答える
0

はい、それは悪い習慣です。それがどれほど悪くなるかは、開発者がそれを見ているかどうかにかかっています。このようなものを手に入れたら、最初に頭に浮かぶのは

なぜ彼はこのコールバックにerrandを渡しているのですか?stats

fs.stat(file, function(err, stats) {
                        \\    \\
                         \\    \\
  fs.stat(file, function(err, stats) {
  });
});

現在行っているように、同じ関数の複数のインスタンスで作業する場合。すべての変数に個別にアクセスできることを確認する必要があります。

1 つの変数またはコンストラクトが使用されなくなったことが確実でない限り、それを再利用できます。ただし、別の開発者が確実に理解できるように、役立つコメントでこれを言及する必要があります。


アップデート:

コールバック関数のこれらの変数にはスコープ制限があるため、関数宣言の外側には影響しません。

有効なケースの例は次のとおりです。

  fs.stat(file, function(err, stats) {

  });

  //Another similar functions somewhere with same varialbes
  fs.stat(file2, function(err, stats) {
  });
于 2013-03-10T18:24:09.410 に答える