function文で定義します。
sample.js
function fact(n) {
return (n==0) ? 1 : n*fact(n-1);
}
for(var i=0; i<7; ++i) console.log(i +'!='+ fact(i));
実行例
$ node sample.js
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
JavaScriptでも、いわゆるラムダ式で無名関数を定義できます。
sample.js
var f = function(x) {
return x*x;
};
console.log(f(2));
実行例
$ node sample.js
4
引数を省略した場合、undefinedが代入されます。そのため、下記サンプルのような既定値の記述法が可能となります。
sample.js
function f(x,y,ope) {
ope = ope || '+';
switch(ope) {
case '+': return x+y; break;
case '-': return x-y; break;
case '/': return x/y; break;
case '*': return x*y; break;
}
};
console.log(f(1,10));
console.log(f(1,10,'+'));
console.log(f(1,10,'-'));
console.log(f(1,10,'/'));
console.log(f(1,10,'*'));
実行例
$ node sample.js
11
11
-9
0.1
10
argumentsオブジェクトを用いて可変長引数をもつ関数を定義できます。
sample.js
function f(/*...*/) {
for(var i=0; i<arguments.length; ++i)
console.log(arguments[i]);
};
f(1);
f(1,2);
f(1,2,3);
実行例
$ node sample.js
1
1
2
1
2
3
引数の個数が多すぎて順番がややこしいときに重宝します。
sample.js
function f(args) {
return args.x + args.y + args.z;
};
console.log( f({x:1, y:2, z:3}) );
実行例
$ node sample.js
6
sample.js
function f(x) {
return function() {return x;}
};
var f_arr = [];
for(var i=0; i<5; ++i) f_arr[i] = f(i);
for(var i=0; i<5; ++i) console.log(f_arr[i]());
実行例
$ node sample.js
0
1
2
3
4