2

Javascript プログラマーが次のようなことをしているのをよく見かけます。

function(index, input) {
  var $input;
  $input = $(input);
  return $input.data('foo', 'bar');
}

私がやろうと思っていたのは次のようなものでしたが:

function(index, input) {
  var $input = $(input);
  return $input.data('foo', 'bar');
}

または、この特定のケースでは、実際には次のようになります。

function(index, input) {
  return $(input).data('foo', 'bar');
}

1 行で 'var' を宣言し、後でそれらに割り当てる値は何ですか? 余分な行を追加しても問題が発生する可能性があるように思えます (たとえば、誰かが「var」を追加するのを忘れて、誤ってグローバル変数を作成する可能性があります)。では、なぜこのようにするのでしょうか。

これはある種のコーディング規約 (おそらく読みやすさ?) にすぎないのでしょうか? それとも、JavaScript が内部でどのように機能するかについて、この構造をより効率的にするための厄介なことがありますか?

4

4 に答える 4

8

この単純な例では、私が言える限り違いはありません。ただし、JavaScript では、関数本体の var 宣言が最初に評価されます。そのため、すべての var 宣言を関数の先頭に追加することは非常に理にかなっています。それらが後でのみ使用される場合でも同様です。

a = "GLOBAL";

function x(){
    console.log(a);
    var a = "VAR";
    console.log(a);
}

x()

印刷します

undefined
VAR

そしてそうではない

GLOBAL
VAR
于 2013-06-11T20:48:45.990 に答える
2

1 行で 'var' を宣言し、後でそれらに割り当てる値は何ですか?

なにもない。どちらの方法でも違いはありません。そのような単純な。

于 2013-06-11T20:47:15.363 に答える
1

これは単なるスタイルの問題だと思います.2番目の例にも部分的であり、同じステートメントで複数の変数を宣言して割り当てることがよくあります。それ以外の理由は考えられません。2 つのステートメントを分離すると、後でコードが大きくなるにつれて混乱が生じる可能性があると主張します。

于 2013-06-11T20:48:42.927 に答える
1

スコープ内に保持する必要がある変数があるとします (または厳密モードになっている) ため、変数を で宣言する必要がありますvar。ただし、条件によっては、その変数を使用できない場合があります。検討:

var foo;
if(cond1) {
    foo = "something";
} else if(cond2) {
    foo = "something else";
} else if(cond3) {
    foo = "a third thing";
}

オープニングvar fooがなければ、次のことを行う必要があります。

if(cond1) {
    var foo = "something";
} else if(cond2) {
    var foo = "something else";
} else if(cond3) {
    var foo = "a third thing";
}

(これは主に保守上の懸念によるものです -- 1 つだけでvar foo = ..済み、残りは単にfoo = ...に任せることもできますが、そのケースをコメントアウトするか変更するとすぐに、 の動作fooが変わります。)

見栄えが悪く、このスコープで無条件に宣言しました (宣言はスコープ先頭に引き上げられるため)。このコードが何らかの関数の奥深くに埋め込まれている場合、2 番目のケースでは、が宣言されているかどうかが読者にとって明確ではない可能性があります。foofoo

于 2013-06-11T20:54:37.537 に答える