function add (arg1, arg2) {
    var result = arg1 + arg2;
    return result;
}
add(2, 5); // => 7
	月: 2007年1月
変数のスコープ
変数を定義するときには,とにかく var をつけておくのが良さそうだ。
- 関数の外で定義した変数はグローバル
 - 関数の中で var を使って定義した変数はその関数内のローカル
 - 関数の中で var を使わずに定義した変数はグローバル
 
関数の中で var を使った場合:
var v1 = "global v1";
function foo() {
    var v1 = "local v1";
    document.write("in function: ", v1, "<br>");      // => "local v1"
    return "function called.";
}
document.write("before function call: ", v1, "<br>");      // => "global v1"
foo();
document.write("avter function call: ", v1, "<br>");      // => "global v1"
before function call: global v1 in function: local v1 avter function call: global v1
関数の中で var を使わなかった場合:
var v2 = "global v2";
function bar() {
    v2 = "local v2";
    document.write("in function: ", v2, "<br>");
    return "function called.";
}
document.write("before function call: ", v2, "<br>");
bar();
document.write("avter function call: ", v2, "<br>");
before function call: global v2 in function: local v2 avter function call: local v2
arguments
関数定義に仮引数を書かなくても,arguments という配列に格納される。引数の数が不定の場合に便利。
function hello() {
    for (var i=0; i<arguments.length; i++) {
        document.write("hello,=", arguments[i], "<br>");
    }
    return i;
}
hello("Andy", "Bill", "Charlie");
	再帰呼び出し
function fact(n) {
    if (n < 0) return null;
    if (n > 0) {
        return (n * fact(n-1));
    } else {
        return 1;
    }
}
	無名関数
名前を指定しないで関数を定義すると無名関数になる。
変数に代入する場合:
var f1 = function(arg1, arg2) {
    return arg1 * arg2;
}
f1(3,2); // => 6
直接使う場合:
var a = new Array(3, 2, -6, 8, -4);
a.sort(function (a,b) {return a - b;});
document.write(a.toString()); // => -6,-4,2,3,8
	if
var val1 = 5;
var val2 = 4;
if (val1 < val2)
    result = val2;
else
    result = val1;
document.write(result);
実行するステートメントが複数なら { } で囲む。
条件演算子もある。
val1 < val2 ? val2 : val1;
for
var sum = 0;
var i;
for (i=1; i<=10; i++) {
    sum += 1;
}
document.write(sum, "<br>");
	for ~ in
var animals = Array("dog", "cat", "elephant");      // 配列
for (x in animals) {
    document.write(x, "<br>");
}
	while
var i = 0;
while (i < 10) {
    document.write(i++, "<br>");
}
ループの停止は break,中断(スキップ)は continue。
var i = 0;
while (true) {
    i++;
    if (i % 2 == 0) continue;
    if (i <= 10) break;
    document.write(i++, "<br>");
}
	try ~ catch
例外処理。
try {
    var today = Date();
    today.set_month(3);      // no such method.
} catch (e) {
    document.write(e);       // => [object Error]
}
例外を発生させるには throw かな。