前回落とした…
文=statement
12 文 / Statements / Standard ECMA-262 5.1 Edition
- いろいろなstatementがある。
- いろいろなバリエーションと、書き方。
仕様書の長さもまちまち。
- VariableStatement ExpressionStatement IfStatement IterationStatementがよく使われる。
- WithStatementは(たまに)使われるかもしれない
- LabelledStatement(GOTOないけど)
DebuggerStatement(デバッガ)
ラベル文自体が別のラベル文になることはある。(LabelledStatement)ラベル文のラベル文のラベル文みたいな入れ子にすることが出来る
- 関数宣言(FunctionDeclaration)を文として使うことをサポートしていないが実装はされている。
ブロック
- opt(オプション)
- からのリストも可能
1個以上のState(文)の繰り返し
ブロック内の分を先頭 (左側) から順に評価
- 評価結果の値 (value) が empty でない最後の値がブロック全体の評価結果として返される
- オブジェクトとして呼ばれない限りは、定義しているだけだったら評価してくれない
変数文
- varというキーワード、セミコロンで終わる
VariableStatement : var VariableDeclarationList ; VariableDeclarationList : VariableDeclarationList , VariableDeclaration VariableDeclarationListNoIn : VariableDeclarationListNoIn , VariableDeclarationNoIn VariableDeclaration : Identifier Initialiseropt VariableDeclarationNoIn : Identifier InitialiserNoInopt Initialiser : = AssignmentExpression InitialiserNoIn : = AssignmentExpressionNoIn
イニシャライザとアイデンティファイヤ
変数を宣言するだけでもいい。Identifier(変数名 名前) Initializer(変数に格納する値として評価される式と= 必須ではない)
withは同じ名前のものがあったらオーバーライドする。
空文
EmptyStatement: ; 間違って空文をやってしまうことはあるかもしれないけど、それをやっても特に何もしない
式文
- 普通の式の記述(演算など)
- {で始められない
functionで開始することも出来ない
Expressionが先頭にきてはいけない
- 中括弧のなかでfunctionからはじめてもいけない
- そういうことは出来るけど、別の定義として区別される
ExpressionStatement : [lookahead ∉ { {, function } ] Expression ;
if文
IfStatement : if ( Expression) Statement else Statement if ( Expression) Statement
反復文
doとかwhileとかforとかfor..inとか
do-while
- V=empty
- iterating=true
- (normal, V, empty)
while
- V=empty
- exprRefをExpressionの評価結果
- ToBooleanがfalseなら(normal, V, empty)
for
IterationStatement : for (ExpressionNoInopt ; Expressionopt ; Expressionopt) Statement
for-in
IterationStatement : for ( LeftHandSideExpression in Expression ) Statement
シャドーイング?
12.6 反復ステートメント / Iteration Statements / Standard ECMA-262 5.1 Edition
continue
入れ子にならない
12.7 continue 文 / The continue Statement / Standard ECMA-262 5.1 Edition
break
12.8 break 文 / The break Statement / Standard ECMA-262 5.1 Edition
仕様上はサポートしていないけど実装上はサポートしているやつ
break文とcontinue文でのラベル指定 - 繰り返し処理 - JavaScript入門
シャドーイング=プロパティチェーイン、親子で同じ名前のプロパティがあると、親のプロパティが見えなくなること
- V=value
- (normal, V, empty)=Vが結果として返っている。Vが値として返っている。受け取るのは言語処理系。
- 返すといっているのは言語処理系に返す。Vも見ているのは言語処理系。(throw, V, empty)を返すのも言語処理系。
- コードからは直接見ることは出来ない。