6 章 文
6.5 switch 文
- switch 文は式の値と同値演算子 (===) で比較し、値が一致する case ラベルを上から順に探す。
- case 句は実行するコードの開始点を示すだけなので、その後ろの case ラベルのコードブロックを実行したくない場合(ほとんどですが)は break 文を記述する必要がある。
6.11 break 文
- 最も内側のループまたは switch 文を直ちに終了する。
- break キーワードの後にラベル名を指定すると、ラベルで指定された文の最後に処理が移動される。
6.12 continue 文
- ループ中で使用し、次の繰り返しからループの処理を再開する。
- while ループの場合は、条件式を再テストし、その結果が true であればループを実行する。
- for ループの場合は、インクリメント式を評価してから条件式を再テストし、次の繰り返し処理へ進むかどうかが判定される。
- for/in ループの場合は、指定された変数に代入された次のプロパティ名から処理が再開される。
6.14 function 文
- function 文による関数定義は、関数を定義するだけであり、コンパイルされた時点で関数文が実行されるわけではない。
alert(f(4)); // 16 が表示される。この文が実行される時点では f 関数が定義済。
var f = 0; // プロパティ f の値を上書きする
function f(x) { // 関数 f の定義は上記文より先に行われる
return x * x;
}
alert(f); // f は 0 に上書きされているので 0 が表示される
6.16 throw 文
- throw 文を記述すると例外がスローされる。
- 例外がスローされると、最も近い例外ハンドラに処理を移動する。
- 例外ハンドラは try/catch/finally 文を使って catch 句に記述する。
- 例外がスローされたコードブロックに catch 句がない場合は、さらに上位のコードブロックに catch 句がないかを調べる。
- 例外ハンドラが見つからなかった場合は、例外はエラーとしてユーザに報告される。
6.17 try/catch/finally 文
- try 句には例外処理の対象となるコードブロックを記述する。
- catch 句には try ブロック内で例外が発生した時に呼び出される文を記述する。
- finally 句に記述したコードは、try 句の処理が終了した後に必ず実行される。
- try ブロックのコードが一部でも実行されれば、finally ブロックのコードも必ず実行される。
- try ブロック中で例外が発生した場合も、catch ブロックのコードが実行された後 finally ブロックのコードが実行される。
6.18 with 文
- with 文が実行されると指定されたオブジェクトがスコープチェーンに追加される。
- 実行後には、スコープチェーンは元の状態に戻る。
- ただし、実行速度が遅くなったり、with 文の本体に関数定義と変数の初期値設定がある場合、思いがけない振る舞いが起きることがあるため、使用は控えた方が良い。
- 以下のコードの場合、o のプロパティ p を表示することを想定しているが、もしそのプロパティが存在しなかった場合、エラーにならずに f 関数の仮引数である p が使用されてしまうからという意味?
function f(o, p) {
with(o) {
alert(p);
}
}
var o = {p: 0};
f(o, 1); // o のプロパティ p の値 0 が表示される
delete o.p;
f(o, 1); // o には p プロパティが存在しないため f 関数の仮引数 p の値 1 が表示される
参考リンク