2013-03-10 14 views
5

例として、非同期ノード関数fs.stat()を取ってください。ファイルにfs.stat()を使用する必要がある場合は、後でもう一度やり直すと結果がシャドーされます。コールバックの変数をシャドーするのは悪い習慣ですか?

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

err変数だけでなく、stats変数が隠されている - 私は2番目の内側に最初のコールバックを使用しない場合、これはさえ重要ですか? 2番目のコールバック変数の名前を変更する方が良いでしょうか?

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

答えて

6

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

  • それは、このコードで動作する必要があります(あなたかもしれない)次の人のために混乱することができますがあります。

  • 今後いくつかの新しい機能を提供するために、外側の値にアクセスする必要があります(たとえば、2つのファイルオブジェクトのタイプが同じであることを確認するなど)。その変更を行うには、コードブロック全体の煩わしい編集が必要になります。

今すぐ別の名前を使用すると、後で問題を防ぐことができます。

0

はい、悪い習慣です。どのくらい悪くなるかを見る開発者に依存します。私がこのようなことをしたら、まずは私の心に浮かぶのは

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

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

あなたが今行っているような同じ機能の複数のインスタンスで作業している場合。すべての変数に個別にアクセスできるようにする必要があります。

1つの変数または構文が使用されていないことが確実でない場合は、それを再利用できます。しかし、他の開発者がそれを理解できるようにするには、これを参考にしてください。


更新:

コールバック関数にこれらの変数は、スコープの制限を持っているので、彼らは、関数宣言の外には影響しません。

有効な場合の例である:コールバックにおけるそれらの変数@hexacyanide

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

    }); 

    //Another similar functions somewhere with same varialbes 
    fs.stat(file2, function(err, stats) { 
    }); 
+0

スコープの制限を有します。だから、彼らの外には影響を受けないだろう、問題はそれらの内部で発生します。 – Starx

関連する問題