<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>ecma関数</title><revhistory><revision><revnumber>12</revnumber><date>2012-10-16 04:15:01</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2012-10-12 05:59:41</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2012-10-12 05:43:30</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2012-10-12 05:42:29</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2012-10-12 05:06:41</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2012-10-05 12:41:34</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2012-10-05 12:39:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2012-10-05 12:35:04</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2012-10-05 12:33:27</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2012-10-05 12:27:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2012-09-08 13:03:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2012-09-08 12:58:20</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>ECMAscriptの関数</title><para>関数の定義は次の形式で行う </para><itemizedlist><listitem override="none"><screen><![CDATA[function kansumei ( hikisuu ) {
        ...
}]]></screen></listitem><listitem override="none"><para>kansumei の部分は関数名、hikisuuは引数。 </para></listitem><listitem override="none"><para>{ と } に挟まれた部分を関数本体という。 </para></listitem></itemizedlist><para>関数本体は数行にわたっても良い。 </para><para>通常、本体の１行目は var 宣言であり、最後は return文である。 </para><para>本体は右にずらして揃えて書くのがよい。（インデントという） </para><!--rule (<hr>) is not applicable to DocBook--><section><title>構文</title><para>関数定義 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E9%96%A2%E6%95%B0?action=AttachFile&amp;do=get&amp;target=function.png"/></imageobject><textobject><phrase>function.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>関数から戻る </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E9%96%A2%E6%95%B0?action=AttachFile&amp;do=get&amp;target=return.png"/></imageobject><textobject><phrase>return.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>関数の実行</title><para>function ... { ... } が読み込まれた時点では、関数の定義が行われるだけで、本体部分の実行はされない。 </para><para>関数呼び出しが行われたとき、次の手順で実行される。 </para><orderedlist numeration="arabic"><listitem><para>引数の名前と、実際の引数の値が対応づけられる。 </para></listitem><listitem><para>関数本体内の文が順に実行される。 </para></listitem><listitem><para>return文が実行されたときは、関数の実行を終わる。値を返す。 </para></listitem><listitem><para>本体の最後まで処理されたときは、関数の実行を終わる。値を返さない。 </para></listitem></orderedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>関数呼び出し</title><para>値を利用する関数呼び出し </para><itemizedlist><listitem override="none"><para>式の中で関数を記述し、その値を利用できます。 </para><screen><![CDATA[x = kansu1(...);]]></screen></listitem></itemizedlist><para>値を利用しない関数呼び出し </para><itemizedlist><listitem override="none"><para>値を利用しないときは文の形で記述します。 </para><screen><![CDATA[kansu2(...);]]></screen></listitem></itemizedlist><section><title>call by value</title><itemizedlist><listitem override="none"><para>引数が number, string, boolean のときは call by value である。 </para></listitem></itemizedlist></section><section><title>call by reference</title><itemizedlist><listitem override="none"><para>引数がオブジェクトのときは call by reference である。 </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section></section><section><title>例</title><para>次の和を求める。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E9%96%A2%E6%95%B0?action=AttachFile&amp;do=get&amp;target=sum1.png"/></imageobject><textobject><phrase>sum1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>nを引数として与えて呼び出すとn項目の値を返す関数を定義する。 </para><itemizedlist><listitem override="none"><screen><![CDATA[function kou(n) {
    return 1/n;
}]]></screen></listitem></itemizedlist><para>これを呼び出して1～100項までの和を求める。 </para><itemizedlist><listitem override="none"><screen><![CDATA[sum = 0;
for(i=1; i<=100; i++) {
    sum = sum + kou(i);
}
print(sum);]]></screen></listitem></itemizedlist><para>プログラムとして作成するときは var宣言を追加すること。 この例ではグローバル変数がsum,iの２つ、ローカル変数は無い。 </para><itemizedlist><listitem override="none"><screen><![CDATA[// n項目の値
function kou(n) {
    return 1/n;
}
// 和を求める
var sum, i;
sum = 0;
for(i=1; i<=100; i++) {
    sum = sum + kou(i);
}
print(sum);]]></screen></listitem></itemizedlist></section></section></article>