2012-03-17 9 views
3

今日、私の髪の毛をすべて馬鹿げたミスで倒そうとしていました。事は、これが期待される行動かどうかわからないということです。 C#の上の私の習慣でJavaScriptのリターンキーワードでこれが期待されていますか?

、私は、次のJavaScriptコードを記述し、それが何も返さなかったとさえコンソールにエラーを書いていないので、間違って起こっているかを理解しようとしています:

this.fullName = ko.computed(function() { 

    return 
     this.firstName() + " " + this.lastName(); 

}, this); 

はその後(時間半後)、私は以下のコードを変更し、それが働いた:

this.fullName = ko.computed(function() { 

    return this.firstName() + " " + this.lastName(); 

}, this); 

が、これは正常な動作ですか?

答えて

10

はい。それは暗黙のセミコロンです。要するにhttp://premii.com/lab/js_implicit_semicolon_and_return.php

は、ここでの説明と同様の状況だあなたの最初のスニペットは次のように解釈されます

this.fullName = ko.computed(function() { 
    return; 
    this.firstName() + " " + this.lastName(); 
}, this); 
+0

JavaScriptはC#ではないという別の証明であり、本当に "エ"アップされた言語です。ありがとう! – tugberk

+0

代わりにCoffeeScriptを使用してください:) –

1

はい、そうです。 Javascriptは、ステートメントを終了するために行末にセミコロンを付ける必要はありません。この場合、単に返されます。

0

はい、javascriptのセミコロンはオプションである傾向がありますので、完全なステートメントをセミコロンだけで区別する方法はありません。私が聞いたこの本を調べて、JSの素晴らしいリソース、douglas crockfordのjavascriptの良い部分です。

0

JavaScriptには、自動セミコロンの挿入という羽があります。これは良くありません。ステートメントが終了すると、それに依存せずセミコロンを追加すべきです。

あなたの場合、;returnに追加してください。

return; 
this.firstName() + " " + this.lastName(); 
4

JavascriptのスペックであるはいECMA Specは、この

特定のECMAScript文(空の文、... return文、と投げのような振る舞いを定義していますので、それは同じですステートメント)は、セミコロンで終了する必要があります。 そのようなセミコロンは、常にソーステキストの に明示的に表示されることがあります。 便宜のために、のように、特定の状況では、ソーステキストからの などのセミコロンを省略することができます。これらの状況は であり、セミコロンは自動的にに のような状況で挿入されると記載されています。引き続き、ブレーク、リターン、またはトークンスローが発生したと LineTerminatorは、次のトークンの前に遭遇した場合、セミコロンは継続した後に自動的に挿入 、休憩、ある

さらにより戻り、または トークンをスローします。リターンまたはスロー声明

発現は返品またはスロートークンと同じ 行に開始する必要があります。

彼らはの与えた:

return; 
a + b; 

ソース

return 
a + b 

は、以下に、自動セミコロン挿入によって形質転換されましたリターンの終わりに自動的に追加セミコロンで

return; 
     this.firstName() + " " + this.lastName(); 

だからあなたの最初のコードでは、と解釈されます。


のでスペックは、一般的なJavaScriptでこのような状況に直面する実用的なアドバイスを提供します:

接尾++または-オペレータは、その オペランドと同じ行に表示されます。

リターンまたはスロー文の発現は返品やスロートークンと同じ 行に開始する必要があります。または文を続けるブレークに

A識別子は、ブレークと同じ ライン上にあるか、トークン継続すべきです。

+1

+1のためのスペック:) –

+0

私は本当に誰が**セミコロンのアイデアを示唆しているのかわかりません**しかし、それは彼がそれをしたときに彼が高かったことは私には明らかです。 – tugberk

関連する問題