1. 概要

このチュートリアルでは、多くのプログラミング言語の最も強力な機能の1つであるクロージャについて学習します。 しかし、それに飛び込む前に、可変スコープとスコープチェーンの概要を見てみましょう。

2. 可変スコープ

まず、変数スコープとは、この変数が表示され、コードで使用できる場所を意味します。 次のスコープを識別します:グローバルスコープとローカルスコープ

2.1. グローバルスコープ

関数の外部で宣言された変数はグローバルとして定義され、アプリケーションのどこからでもアクセスできます。

var foo = 1;

function bar() {
    print(foo);
}
  
print(foo);

2.2. ローカルスコープまたは関数スコープ

変数が関数内で宣言されている場合、その変数にはローカルスコープまたは関数スコープがあります。つまり、変数は関数内でのみ使用でき、関数外でアクセスしようとするとエラーが発生します。

function bar() {
    var foo = 1;
    print(foo); // prints 1
}

print(foo); // error: foo is not defined
bar(); // prints 1

3. 閉鎖

多くのプログラミング言語では、関数は関数を返すことができます。 また、関数が関数を返す場合、返される関数は、親関数で宣言されている、実行する必要のあるすべての変数への参照を保持します。

それがまさにクロージャーです。 これは、関数が実行する必要のある変数への参照のバケットであり、そのスコープ外で宣言されます。 

例えば:

function foo() {
    var a = 10; // outer scope
    
    return function bar() {
        var b = 10; // inner scope
        print(a + b); 
    } 
}
  
foo(); // prints 20

function foo(param) {
    return function bar() {
        var b = 10; // inner scope
        print(param + b); 
    } 
}

var anotherWayToCall = foo(10); // this returns a function
anotherWayToCall(); // prints 20

4. 結論

この簡単な記事では、クロージャの概念について説明しました。これは、ほとんどのプログラミング言語のコア概念の1つであり、インタビューの準備において確かに最も重要なトピックの1つです。