第14条 プログラム
Program : SourceElementsopt SourceElements : SourceElement SourceElements SourceElement SourceElement : Statement FunctionDeclaration
1.このProgramのコードは、指定プロローグ (14.1 指定プロローグ)が、 Use Strict 指定を含む当該SourceElementsから成る場合や一部が、 10.1.1を適用した条件から成る場合、strict mode(厳格モード)のコード Programのコードが、strict mode(厳格モード)のコードである場合、SourceElementsは、strict mode(厳格モード)のコードのように次のステップ内で評価され、それ以外は、SourceElementsは、非strict mode(厳格モード)のコードのように次のステップ内で評価される 2. SourceElementsが、存在しない場合には、return (normal, empty, empty) 3. progCxt は、 10.4.1で説明したようにグローバルコードにおける新たな実行コンテキストとする 4. result は、SourceElementsを評価した結果とする 5.実行コンテキスト progCxt を抜ける 6. resultを返す
optionalなのでプログラムは書かれていなくてもいい
SourceElements : SourceElements SourceElement
- headResult は、SourceElementsを評価した結果とする
- headResult が、中途完了(an abrupt completion)である場合、 headResultを返す
- tailResult は、SourceElementを評価した結果とする
- tailResult.value が、 emptyである場合、 V = headResult.value とし、それ以外の場合、 V = tailResult.valueとする
- return (tailResult.type, V, tailResult.target)
SE1;SE2;SE3;SE4; ----------- --- head tail ------- --- head tail --- --- head tail
いろいろ書かれていはいるが、ソースコードを上から読んでいって、評価結果を言語処理系に渡している。 (仕様書に書かれてはいないが)上記のような再帰で
SourceElement : Statement
- Statementを評価した結果を返す
SourceElement : FunctionDeclaration
- return (normal, empty, empty)
- 関数定義しただけだったら、emptyを言語処理系に渡す
- 宣言しただけだったらプログラムに何の影響も与えない
- 関数を呼び出して初めて関数宣言が意味をなす
- ただし関数リテラルの形で書かれていたら、代入自体がstatementになるので、そのまま評価される
- 関数が宣言されていても呼ばれなければ存在しないのと一緒(ので、minifyツールなどで呼ばれていない関数を消すことは出来る)
function a() { var a = 1; }
呼び出したらエラーになるような関数を定義していても呼び出さなければエラーにならない(実行可能かどうかは呼び出さなければわからない) gist.github.com
でも、構文として形式的に正しいかどうかは見ている。形式がおかしかったらエラーになる。
ただし、構文パースで問題ないことと、実行時にエラーになることはまた話が違うが、構文エラーにもならず実行時にもエラーにならないものはインタプリタはエラーは吐かない(consoleに警告を出すことはあるかもしれない) gist.github.com
これもおーけー。ただし、AltJSによってはコンパイル不可能な可能性はある。
14.1 Directive Prologue と Use Strict Directive
Program (プログラム)や FunctionBody (関数本体)の最初の SourceElement (ソース要素)プロダクション、また、セミコロンに続けて StringLiteral (文字列リテラル・文字そのままの)トークン (字句)全体を構成する並びにある各 ExpressionStatement (式文・式の文)として現れる ExpressionStatement プロダクションの最も長い並び
use strictについてのはなし。
blog.niw.at24-202513.js · GitHubgist.github.com
次回以降
6と5.1の15条を比較しながら
- 作者: 竹迫良範
- 出版社/メーカー: 秀和システム
- 発売日: 2013/09/25
- メディア: 単行本
- この商品を含むブログを見る