functionの違い
- 文(function文)か式(function演算子)かという違いがある。
- 書き方はどちらも同じだが振る舞いが少し異なる。
関数文の場合
1. そのスコープ内に関数名と同じ名前の変数が作られる。
func(); // ok!! スコープ内だったら宣言より前の部分でも使える
function func() {...}
func(); // ok!!
関数式の場合
1. 変数に代入するまでは使えない。
func(); // error
var func = function(){...};
func(); // ok!!
2. 関数名と同じ名前の変数は作られない。
var func = function test(){...};
test(); // error
func(); // ok!!
3. 内部で自身の名前を使うことは可能。
// 再帰的な処理の例
var calc_fib = function fib(n) {
if ( n == 0 ) return 0;
if ( n == 1 ) return 1;
return fib(n-1) + fib(n-2);
};
fib(10); // error, 関数式の関数名は内部でのみ使用できる。
calc_fib(10); // ok!!