(function(){ return やる気; })();
関数と関数リテラルの違い
関数リテラル
-
- 例えばこんな
// 階乗する関数。関数に名前をつけることで再帰呼び出しをしている。 var f = function factorial( x ) { if( x <= 1 ) { return 1; } else { return x * factorial( x - 1 ); } }
可変長の引数リスト
関数の引数は定義した仮引数以外にも、Arguments オブジェクトでアクセスできます。
-
- 例えばこんな
function Sum( /* 引数いくつでも */ ) { var result; for( var i = 0; i < arguments.length; i++ ) { result += arguments[ i ]; } return result; } var answer = Sum( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); // answer は 55
可変長の引数と聞くと 文字列のFormat関数が真っ先に思い浮かびました!
でもJavaScriptって型に厳しくないからそんなの必要ないですね><
callee プロパティ
これはArguments オブジェクトの一プロパティなんですが、今まで知りませんでした。
「callee プロパティは、現在実行中の関数を参照します。」とあります。
実際に試してみた↓
function Sum( x ) { if( x <= 1 ) return x; return x + arguments.callee( x - 1 ); } alert( Sum ( 10 ) ); // 出力は 55
おお!なるほど、まさしく自分自身を参照してますね!
サイ本読んでて思ったこと
JavaScriptって奥深すぎ><
普段ぜんぜん知らないで使ってたんだなーって思い知ったです。
もうすぐでオブジェクト指向的になるぞ☆