0

jslint.com のガイドラインに従えば、それらを関数の先頭に配置し、このように複数のステートメントを統合することができます。

function(){
    var foo,
        moo,
        hoo;

ただし、underscore.js と backbone.js を学習しているうちに、この規則が守られておらず、必要に応じて使用されていることがわかりました。例えば。たとえば、_.each()

  for (var key in obj) {

読みやすい方法はありますか?片道は速いですか?

JavaScriptにはブロックスコープがないことを知っています。

4

4 に答える 4

2

「どの方法が最も速いか」は簡単に答えられます。コードをすばやく作成して保守できる方法はどれでもかまいません。これはソース コードの品質に関するものであり、実行に関するものではありません。インタプリタはどちらの方法でも実行できます。

C の初期バージョンを含む古いプログラミング言語は、関数の開始時にのみ変数宣言をサポートしていました。このようにすると、関数で使用される変数の概要を 1 か所ですぐに確認できます。コードは予測可能な構造を持っています。どこでも変数を宣言できる機能は、後で追加されました。これは、多くの人が便利で良いアイデアであると判断したためです。変数を使用する場所の近くで変数を宣言できるため、宣言と使用を一緒に検査および管理できます。コードは、よりモジュール構造になっています。

これは人的要因に関するものであるため、どちらが「優れている」かは完全に未解決の問題です。スタイルのガイドラインは別の問題です。スタイルの規則は、合理的な方法であることを意図しており、必ずしも唯一の良い方法ではありません。しかし、規則に従うことで一貫性が得られ、コードの読者は何を期待すべきかを理解できます。従来のスタイルがあるコンテキストでコードを記述している場合は、それに従います。明快さと一貫性によって得られるものは、他のスタイルに従わないことによってあきらめる可能性があるものよりもはるかに価値があります.

于 2013-02-22T16:08:59.900 に答える
1

これより良い方法はなく、2 つのアプローチに速度の違いはありません。宣言は「巻き上げられ」、関数全体で使用できるため、どちらもまったく同じです。(ただし、割り当てられるまで値はありません。)

そうは言っても、残りの宣言を先頭に置いたとしても、ループ変数をループvar内で使用する傾向があることに気付きました。forこの理由はおそらく、この var が関数の残りの部分で使用されておらず、使い捨てループ var であることをコード リーダーに知らせたいためです (このブロックにのみ関連があるかのように扱います)。

これらの の使用は、Javascript 1.7 が広く採用さvarれるようになると、おそらく に置き換えられます。let

于 2013-02-22T16:07:58.030 に答える
1

スクリプトはどちらの方法でも同じように機能するため、プログラミング スタイルの問題にすぎません。

変数は巻き上げられる、つまり関数内のコードが始まる前に宣言されるので、コードの先頭で変数を宣言するのが理にかなっています。

変数を宣言する場所に関係なく、パフォーマンスは同じです。

于 2013-02-22T16:03:43.637 に答える
0

規則は通常、コードを読みやすくするために作成され、メンテナンスを安価/高速にします。この特定の規則が役立つ場合がありますが、必要ではないと思います。

ただし、あなたが示した例は、ループにのみ使用されることを意図したインクリメント変数の宣言であり、その変数はループの外で使用しないでください(まれな場合を除く)。したがって、それを宣言することは完全に理にかなっています。ループが完了したら、それを忘れます (または、ほとんど必要ありませんが、クリーンアップします)。

于 2013-02-22T16:06:05.227 に答える