by shigemk2

当面は技術的なことしか書かない

第10回 ECMA-262 Edition5.1読書会 #ecma262

前回落とした…

文=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は同じ名前のものがあったらオーバーライドする。

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 - 式と文、評価と実行、そして副作用 ―― プログラムはいかにして動くのか【前編】