一連の処理をまとめたファンクション(ユーザ定義関数)を定義する事ができます。ファンクションは、いくつかの引数を受け取り、処理結果を返す事ができます。ファンクションは、オブジェクトの持つメソッドと似ていますが、特定のオブジェクトには結びついていません。また、メソッドのように引数の数の規定もありません。
ファンクションの定義例
Function func1(p1, p2) { return p1+p2; }
呼び元
var a1 = 2; var a2 = 3; func1(a1, a2);
この例は、2つの引数を受け取り、合計を返すファンクションです。
ファンクションの名前は、オブジェクトの名前と同じ以下の命名規則が適用されます。
1. 英字または日本語の文字で始まること
2. 2文字目以降は英数字、アンダースコア(_)または日本語であること
3. 全体の長さが30バイト以内であること
ファンクションは、オブジェクトと同じように//から始まるオブジェクトツリーの一部として識別する事ができます。例えば、次のように記述した場合、//.Form1.Button1.Func1()として呼び出す事ができます。
Form Form1 { : Button Button1 { : Function func1() { return 10; } } }
同じ名前のオブジェクトやファンクションが同じ階層位置に既に定義されている場合、先に定義されていたオブジェクトやファンクションは、削除され後から定義されたファンクションに入れ替わります。
ファンクションは、0個以上の任意の数の仮引数を持つ事ができます。上限に制約はありません。ファンクションの定義と呼出し元で、必ずしも引数の数が一致する必要はありません。定義よりも呼び出し元で少ない引数を渡した場合、後続の仮引数にはnull値が渡されます。また、定義よりも多い引数を渡した場合、定義数を超えた引数は無視されます。
可変個の引数を定義する事はできません。可変個の引数が必要な場合、上記のように最大限想定できる数の引数を定義し、実際に渡された引数をnull値との比較により判断するか、Arrayや配列オブジェクトを利用する事になります。
ファンクションは、return文により戻り値を返す事ができますが、必須ではありません。return文で戻り値を返さない場合、ファンクションの戻り値は不定となり意味のある結果は返されません。