前回落とした…
文=statement
12 文 / Statements / Standard ECMA-262 5.1 Edition
- いろいろなstatementがある。
- いろいろなバリエーションと、書き方。
仕様書の長さもまちまち。
ブロック
- opt(オプション)
- からのリストも可能
1個以上のState(文)の繰り返し
ブロック内の分を先頭 (左側) から順に評価
- 評価結果の値 (value) が empty でない最後の値がブロック全体の評価結果として返される
- オブジェクトとして呼ばれない限りは、定義しているだけだったら評価してくれない
変数文
VariableStatement :
var VariableDeclarationList ;
VariableDeclarationList :
VariableDeclarationList , VariableDeclaration
VariableDeclarationListNoIn :
VariableDeclarationListNoIn , VariableDeclarationNoIn
VariableDeclaration :
Identifier Initialiseropt
VariableDeclarationNoIn :
Identifier InitialiserNoInopt
Initialiser :
= AssignmentExpression
InitialiserNoIn :
= AssignmentExpressionNoIn
イニシャライザとアイデンティファイヤ
変数を宣言するだけでもいい。Identifier(変数名 名前) Initializer(変数に格納する値として評価される式と= 必須ではない)
withは同じ名前のものがあったらオーバーライドする。
26-195105.js
空文
EmptyStatement: ; 間違って空文をやってしまうことはあるかもしれないけど、それをやっても特に何もしない
式文
- 普通の式の記述(演算など)
- {で始められない
functionで開始することも出来ない
Expressionが先頭にきてはいけない
- 中括弧のなかでfunctionからはじめてもいけない
- そういうことは出来るけど、別の定義として区別される
ExpressionStatement :
[lookahead ∉ {
{, function
}
] Expression ;
if文
IfStatement :
if ( Expression) Statement else Statement
if ( Expression) Statement
26-200236.js
反復文
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
シャドーイング?
26-201243.js
12.6 反復ステートメント / Iteration Statements / Standard ECMA-262 5.1 Edition
continue
入れ子にならない
12.7 continue 文 / The continue Statement / Standard ECMA-262 5.1 Edition
break
26-201755.js
12.8 break 文 / The break Statement / Standard ECMA-262 5.1 Edition
26-202841.js
仕様上はサポートしていないけど実装上はサポートしているやつ
26-203153.js
26-203958.js
26-204325.js
break文とcontinue文でのラベル指定 - 繰り返し処理 - JavaScript入門
26-204554.js
シャドーイング=プロパティチェーイン、親子で同じ名前のプロパティがあると、親のプロパティが見えなくなること
- V=value
- (normal, V, empty)=Vが結果として返っている。Vが値として返っている。受け取るのは言語処理系。
- 返すといっているのは言語処理系に返す。Vも見ているのは言語処理系。(throw, V, empty)を返すのも言語処理系。
- コードからは直接見ることは出来ない。
Rubyist Magazine - 式と文、評価と実行、そして副作用 ―― プログラムはいかにして動くのか【前編】