2012-01-04 6 views
14

JavaScriptでは、あなたはこのように、コードブロックコードで任意に置かれ、それらの前にそのようなiffunctionか何か、なし、つまり、孤独なコードブロックを持つことができます。Javascriptで孤独なコードブロックの目的は何ですか?

var a = 3, 
b = 4; 
{ 
    a = 50; 
    b = 50; 
} 
alert(a + b); //alerts 100 

を私はいくつかの他の言語を知っていますこれを持っている(私はC++と思う)、スコープ制御のためにそれを使用する:孤独なコードブロックの中で宣言された変数は、その外部にアクセスすることはできない。しかし、Javascriptはスコープではなく機能スコープを持っているので、自己実行機能(function(){})()を使用して同じ効果を達成する必要があります。

この構造の目的はありますか?誰か見たことがありますか?スペックはそれに言及していますか?これはコードブロックに関する一般的な規則を持つ文法の副作用ですか?

+1

仕様:http://ecma262-5.com/ELS5_HTML.htm#Section_12.1 –

+2

は、私はあなたがこのコードが誤って、彼らはブロックスコープを取得したと思った誰かによって書かれた参照ほとんどの時間を考えます。スコープコントロールが与えられていないことを知っている一部の人は、ビジュアルグループが好きなので、それを使用しますが、スコープを意味するので、読者にはわかりません。 – nnnnnn

+0

@FelixKlingは誰にでも分かります** ** ** ... – c69

答えて

9

私はHow are labels used with statements that are not a loop?のための私の答えをグーグルで後に見られるような、孤独なコードブロックは、ラベルに関連することができます。

myLabel: 
{ 
    for(x in y) { 
     break myLabel; 
    } 
} 

は、同様に、ループのが、外側のコードブロックのではないだけを中断します。

+0

ああ、私はそれを知らなかった、クール! –

+0

実際、それについて考えた後、私はこれが技術的に正解であるとは確信していません。コードブロックにラベルを付けることによって、それが厳密に孤独であるとは考えられないかもしれません。forや関数などの代わりに、ラベルに付けられます。 – Jeff

+0

とにかくそれを受け入れます。 ;)他の人が基本的に私が知っていたことを私が話したとき、私は実際にこの答えから何かを学んだ。 –

4

コードの読みやすさだけです。

var c = 'fail'; 
{ 
    var c = 123; 
} 
alert(c); //alerts 123 

see it live

+0

可視性はどういう意味ですか? –

+0

@PeterOlson:**コードの可読性**を意味します。これはコードを読むときにのみ役に立ちますが、私はそれを行う他の理由はわかりません。 – Tadeck

+1

おそらくそれがより読みやすいと主張できる場合があります。個人的に私はこの構文をJavaScriptに使用しません。 – sissonb

0

のみ読みやすさ:

は、彼らはあなたにクロージャの優位性を与えることはありません。それ以外は何もありません。 ではないこれは将来の保証ではありません。それは機能の論理的な分離を許可され

"use strict"; 

var a = 3, 
b = 4; 
{ 
    a = 50; 
    b = 50; 
} 
alert(a + b); //alerts 100 

が、私はそれを自分自身を使用するために使用されるが、もはや上記のためにやるん:以下は喜んで解除されます。

+0

論理区切りを表すためにコードの段落を使用する方が簡単で保守性が良いですか? –

+1

@PeterOlson - 私はこれを大部分のスクリプトに使用しました。 'Program Config'、' Handle Command-Line Options'、 'Error Handling'などはすべて独自のセクションに分割され、匿名ブロックでラップされます。ここでのすべてのコードは特定の機能グループに属しているという考え方を「強制」しています。それは___very___きれいに見えるときにきれいにそしてきれいにする –

6

アップデート(この質問は「JavaScriptのコードブロック」のためのGoogleで高現れとして):

のECMAScript 6でletキーワードのintroducitonでは、コードブロックはまた、変数の範囲を限定するために使用することができます。

{ 
    let x = 20; 
    alert(x) // 20 
} 
alert(x) // undefined 
関連する問題