JavaScript 1.2 より前は、関数定義はトップレベルのグローバル コードでのみ許可されていましたが、JavaScript 1.2 では関数定義を他の関数にネストできます。
まだ存在する関数定義は、出現せずにループしたり、条件内で制限したりできます。関数定義に関するこれらの制限は、関数宣言と関数ステートメントにのみ適用されます。
関数リテラル (JavaScript 1.2 で導入された別の機能) は、任意の JavaScript 式に使用できます。つまり、if else ステートメント内に使用できることを意味します。
例:
ここでは 2 つの入れ子関数の例を示します。これは少し混乱するかもしれませんが、完全に機能します:
<script type="text/javascript"> <!-- function hypotenuse(a, b) { function square(x) { return x*x; } return Math.sqrt(square(a) + square(b)); } //--> </script>
注: ここでは、数学クラスの sqrt 関数を使用しています。
これで、この関数は次のように通常の方法で呼び出すことができます:
<script type="text/javascript"> <!-- hypotenuse(1, 2); // This will produce 2.2360 //--> </script>