3

私の妻はCodecademy(Javascript)を使って作業していて、セミコロンに不満を感じていました。彼女は、どの行をセミコロンで終わらせる必要があるかを私に尋ねました。彼女はまだ始めたばかりなので、ここで「ステートメント」や「表現」などを怖がらせたくありませんでした。セミコロンを気にしないように彼女に言っただけです。結局のところ、JSです;)

それで、私はそれをどのように説明すべきでしたか?

4

3 に答える 3

5
  1. セミコロンはそれぞれを終了します。
  2. それがそのことを終わらせるので、あなたはすぐにそれを望まないif(test)でしょう(確かに-それは無効ではありません、あなたは本当にそれをすぐに終わらせたくないだけです)。同様にfor(a;b;c)(ただし、内部の各ものfor は物です)。
  3. x = 2 + 1 + 3 + 4 + 5 * 10 + 2;単一のものであるか、またはあなたは全体の合計を持っていないでしょう。3行または4行を超えても、1つの合計(1つのもの)にする必要があります。
  4. 中括弧は、いくつかのものを1つの大きなものにグループ化します。それらはすでに終わりのあるものなので、セミコロンは必要ありません。しかし、それは害にはなりません。
于 2012-08-27T23:10:06.417 に答える
1

単純なルールは、すべてのステートメントがセミコロンで終了する必要があるということです。式、ブロック、関数宣言などはセミコロンで終わりません。たぶん、次のことが役立ちます。

ブロックはセミコロンで終わらない:

if ( /*condition */ ) { // start of block, no semicolon
  ...                   // function body
}                       // end of block, no semicolon

do..whilewhilefor..inなどの他のブロックについても同じことが言えます。

関数宣言にはセミコロンがありません(ブロックを使用します):

function foo() { // start of block
  ...            // code, may be statements with semicolons and more blocks
}                // end of block, no semicolon

ブロックのように見えますが、そうではないもの:

// Object literal isn't a block, it's a statement so uses {}
var obj = {name: 'fred', sex: 'male'};

// Object literal over several lines has one semicolon at the end
var obj = {
    name: 'fred',
    sex: 'male'
};

ステートメントとしての関数式:

(function(){...}());  // expression in (), the
                      // terminating semicolon makes it a statement

数行にわたって:

(function(){  // Start of block (function body) doesn't use semicolon
    ...
 }()          // block end, no semicolon.  Can't end statement here
              // (unbalanced parenthesis) so no semicolon after ()
);            // but end of statement does need semicolon

関数式は単なる式である可能性があることに注意してください。

たとえば、関数式を呼び出した結果を渡す関数呼び出し(関数式本体のセミコロンで終了するステートメントに注意してください):

foo( (function(){alert('hey'); return 'ho';}()) );

function foo(s) {
  alert(s);
}

セミコロンが必要かどうかをテストするには、2行のコード間の改行を削除します。

var a = 'foo';
alert(a);

改行を削除します。

var a = 'foo'; alert(a); // works

セミコロンを削除します。

var a = 'foo' alert(a); // fails
于 2012-08-27T23:55:47.700 に答える
0

私のJavascriptは少し錆びていますが、}または{で終わっていない限り、すべての行を回避できると思います。次に、各ステートメントが新しい行にあることを確認します。ただし、元の質問を考えると、問題ではないと思います。

また、行をセミコロンで終わらせないのは悪い考えです。実際に動作しない場合があります。

編集

ほとんどの場合、問題はないはずです。別の回答に投稿された記事はそれについてよく読んでいますが、それでも私はセミコロン*への愛情を支持しています。

于 2012-08-27T22:54:28.720 に答える