JavaScriptの入れ子関数(ネストした関数)とは?仕組みと実装例を解説
入れ子関数とは
JavaScriptでは、関数定義を別の関数の中に入れ子(ネスト)にして記述することができます。これを「入れ子関数」と呼びます。内側の関数は外側の関数のスコープ内でのみ有効となり、外部から直接呼び出すことはできません。
ただし、いくつかの制限があります。関数定義はループ処理や条件分岐(if文など)の中に記述することはできません。これらの制限は、function文による関数宣言に対してのみ適用される点に注意してください。
サンプルコード
以下のコードを実行すると、JavaScriptにおける入れ子関数の実装方法を確認できます。
<html>
<head>
<script>
function hypotenuse(a, b) {
function square(x) { return x*x; }
return Math.sqrt(square(a) + square(b));
}
function secondFunction(){
var result;
result = hypotenuse(3,4);
document.write ( result );
}
</script>
</head>
<body>
<p>Click the following button to call the function</p>
<form>
<input type = "button" onclick = "secondFunction()" value = "Find Hypotenuse">
</form>
</body>
</html>
コードの解説
この例では、hypotenuse関数(斜辺の長さを求める関数)の中に、square関数(引数を2乗して返す関数)が定義されています。square関数は補助的な役割を持つ関数で、hypotenuse関数の内部からのみ呼び出せます。
ページ上のボタンをクリックするとsecondFunctionが実行され、hypotenuse(3, 4)の計算結果である「5」(直角三角形の斜辺の長さ)が画面に出力されます。
押さえておきたいポイント
- 内側の関数は、外側の関数の中でのみ呼び出し可能
- 関数宣言は、ループや条件分岐の中には記述できない
- 内側の関数からは、外側の関数の変数や引数にアクセスできる(クロージャの基礎となる仕組み)
-
JavaScriptの部分関数(Partial Function)とは?仕組みと実装例をわかりやすく解説
部分関数(Partial Function)とは、既存の関数を引数として受け取り、それに加えて別の型の引数も同時に受け取れるようにする仕組みです。まず渡された引数の一部を使い、残りの引数を受け取る新しい関数を返します。そして、返された関数が呼び出されるときに、あらかじめ固定しておいた引数とそのときに渡された引数をすべて組み合わせて、元の親関数が実行されます。 この手法は「部分適用(Partial Application)」とも呼ばれ、関数型プログラミングの基本的なテクニックのひとつです。共通する引数を先に束縛しておくことで、処理の再利用性やコードの可読性を高めることができます。 コード例 以下
-
JavaScriptのクロージャとは?仕組みと実装例をわかりやすく解説
クロージャとはJavaScriptにおけるクロージャ(Closure)とは、外側の関数の実行が完了して値を返した後であっても、内側の関数から外側の関数のスコープ(変数)にアクセスできる仕組みのことです。言い換えれば、内側の関数は、外側の関数の変数に対して常にアクセスできるということです。この性質を活用することで、データを外部から直接操作されないように隠蔽したり、関数の呼び出し間で状態を保持する処理を実現したりすることが可能になります。クロージャのサンプルコード以下は、JavaScriptでクロージャを使用した具体的なコード例です。ボタンをクリックすると、クロージャによって保持された値を使って2