function add (arg1, arg2) { var result = arg1 + arg2; return result; } add(2, 5); // => 7
日: 2007年1月28日
変数のスコープ
変数を定義するときには,とにかく 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