JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptの無名関数とクロージャの基本をわかりやすく解説

無名関数(匿名関数)とは

無名関数(Anonymous Function)は、その名の通り、関数名を持たない関数を作成するための仕組みです。JavaScriptでは、この無名関数を変数に代入して定義し、その変数名を使って呼び出すのが一般的な使い方です。また、他の関数の引数として渡すこともできるため、コールバック処理などで頻繁に活用されます。

以下は、変数に代入した無名関数を呼び出す基本的な例です。

var func = function() {
    alert('This is anonymous');
}
func();

次の例のように、setTimeout() の引数として無名関数を直接渡すこともできます。この場合、3秒(3000ミリ秒)後にアラートが表示されます。

setTimeout(function() {
    alert('Demo');
}, 3000);

JavaScriptにおけるクロージャ

JavaScriptでは、すべての関数がクロージャとして動作します。クロージャとは、「自分が宣言されたときのスコープ」を記憶し、呼び出された際にはそのスコープを利用する関数のことです。重要なのは、関数が「呼び出された場所のスコープ」ではなく、「宣言された場所のスコープ」を参照するという点です。

次のサンプルコードで、その動作を確認してみましょう。

<!DOCTYPE html>
<html>
    <body>
        <h2>JavaScript Closures</h2>
        <script>
            var p = 20;
            function a() {
                var p = 40;
                b(function() {
                    alert(p);
                });
            }
            function b(f) {
                var p = 60;
                f();
            }
            a();
        </script>
    </body>
</html>

このコードを実行すると、アラートには 40 が表示されます。

理由を見てみましょう。無名関数は関数 a() の内部で宣言されているため、グローバル変数の p = 20 や、関数 b() 内の p = 60 ではなく、宣言時のスコープである p = 40 を参照します。これこそがクロージャの本質的な動作であり、JavaScriptのスコープチェーンを理解するうえで非常に重要な概念です。

  1. JavaScriptの匿名ラッパー関数(IIFE)とは?使い方を徹底解説

    匿名ラッパー関数(Anonymous Wrapper Function)は、コードスニペットやJavaScriptライブラリ、個々の関数などを包み込むために使われる手法です。コードの可視性や名前空間(namespace)を制御することで、他のライブラリや外部スクリプトとの名前の衝突・競合を防ぐことができます。 この目的のために広く利用されているのが、IIFE(即時実行関数式:Immediately Invoked Function Expressions)です。IIFEは定義されたその場で即座に実行される関数式であり、関数内部で宣言された変数は外部からアクセスできないため、グローバル名前空間を

  2. JavaScriptのファーストクラス関数とは?特徴と使い方を実例で解説

    ファーストクラス関数(第一級関数)とは? JavaScriptでは、関数もオブジェクトの一種として扱われます。そのため、関数を別の関数の引数(パラメータ)として渡したり、関数の中で別の関数を戻り値として返したりすることが可能です。 このような性質を持つことから、JavaScriptの関数はファーストクラス関数(第一級関数)と呼ばれています。つまり、関数は変数・オブジェクト・配列などに自由に格納できる「値」だということです。 さらに、関数を引数として受け取る、関数を戻り値として返す、あるいはその両方を行う関数は高階関数(Higher Order Function)と呼ばれます。 ファーストクラ