0

次のような関数があります。

function SomeFunction() {

  var SomeVar;

  if (SomeCondition) {
     SomeVar = 4;
  }
}

これは次と同等です。

function SomeFunction() {

  if (SomeCondition) {
     var SomeVar = 4;
  }
}

条件が true の場合にのみ var ステートメントを使用しても違いはありますか?これに関するベスト プラクティスやパフォーマンスへの影響はありますか?

ありがとう。

編集:はい、ブロックスコープがなく、関数スコープしかないことを認識しています。

4

5 に答える 5

4

それらはまったく同じように機能しますが、どこに配置するかについては 2 つの考え方があります。

あるグループは、(存在しない) ブロックスコープに依存しているという誤った印象を避けるため、関数の先頭に配置する必要があると述べています。

他のグループは、変数をブロックスコープであるかのように扱い、他の場所では使用しないことを示すため、適切なブロックに配置する必要があると述べています。

私の知る限り、私は 2 番目のグループの唯一のメンバーです。

于 2012-07-12T17:13:54.393 に答える
3

ステートメントを配置する場所はvar、コードには影響しません。これは純粋にスタイルの問題です。

をブロックvarの先頭に置く方がはるかに明確であると感じる人もいます。functionJavascript の変数の有効期間は、スコープではなく、変数が宣言されている関数に関連付けられています。他の多くの中括弧言語は反対のことを行い、これは多くの新規ユーザーにとって混乱の原因です。したがって、関数の先頭で宣言すると、コードがより明確になると人々は信じています。

于 2012-07-12T17:11:55.350 に答える
1

JavaScript では、C/C++ のような変数のブロック スコープはありません。したがって、if () {}ブロック内で変数を宣言しても、変数は実際には関数の先頭ですぐに作成されます。この「宣言を引き上げる」効果は、通常「巻き上げ」と呼ばれます。

どちらのコードも正しいですが、最初のコードの方が意味的に優れていると思われます。これは、SomeConditionが true であるかどうかに関係なく変数が存在するという事実を強調するためです。

于 2012-07-12T17:15:13.567 に答える
0

これらはどちらも実際には同等です。「巻き上げ」「関数とブロックのスコープ」を読んでください。

速度に関しては、宣言と代入を同じステートメントで組み合わせる 2 番目のケースを使用した方がよいでしょう。参照: http://jsperf.com/stackoverflow-frenchie

于 2012-07-12T17:12:00.450 に答える
0

関数の先頭に置きます。とにかく実行時に常にそこに移動されますが、実際に実行される場所に配置すると、混乱/不正確な仮定がクリアされます。

あなたの場合、最初のスニペットです。

(また、純粋にスタイル、PascalCase ではなく、クラス camelCase を除くすべての識別子を書き込みます)

于 2012-07-12T17:15:31.963 に答える