ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript のクロージャ: インタビューでよくある質問と回答

JavaScript のクロージャ: インタビューでよくある質問と回答

Linda Hamilton
リリース: 2024-11-09 00:43:02
オリジナル
1004 人が閲覧しました

JavaScript Closures: Top Interview Questions and Answers

JavaScript のクロージャ: インタビューでよくある質問と回答。

1. JavaScript におけるクロージャとは何ですか?

答え:
JavaScript では、内部関数が外部関数内で定義され、外部関数の変数とパラメーターにアクセスできるときにクロージャが作成されます。外側の関数の実行が終了した後でも、内側の関数はそれらの変数へのアクセスを保持します。

2. JavaScript においてクロージャが重要なのはなぜですか?

答え:
クロージャはデータのカプセル化と関数のプライバシーを可能にするため、JavaScript では重要です。これらは、クリーンなグローバル スコープを維持するのに役立ち、オブジェクト指向プログラミングの基本的な側面である、外部からアクセスできないプライベート変数の作成を可能にします。

3. JavaScript でのクロージャの例を挙げていただけますか?

答え:

function outerFunction() {
  var outerVariable = "Hello, ";
  function innerFunction(name) {
    console.log(outerVariable + name);
  }
  return innerFunction;
}
var inner = outerFunction();
inner("John"); // Output: "Hello, John"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、innerFunction は、outerFunction の実行が終了した後でも、outerFunction で定義された externalVariable にアクセスできるため、クロージャです。

4. JavaScript でクロージャをどのように使用しますか?

答え:
JavaScript では、外部関数内で内部関数を定義し、その内部関数を返すことによってクロージャを使用します。内部関数は、外部関数の実行が完了した後でも、外部関数の変数とパラメーターへのアクセスを保持します。

5. 次のコードの出力はどうなりますか?

function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}
var innerFunc = outer();
innerFunc();
ログイン後にコピー
ログイン後にコピー

答え:
出力: 10
説明: アウター関数はインナーを返し、インナーはアウター内で宣言された変数 x にアクセスできます。 innerFunc が呼び出されると、x、つまり 10 が記録されます。

6. 次のコードの出力はどうなりますか?

function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  x = 20;
  return inner;
}
var innerFunc = outer();
innerFunc();
ログイン後にコピー

答え:
出力: 20
説明: inner が返される前に、x の値が 20 に更新されます。 innerFunc が呼び出されると、x の更新された値 (20) が記録されます。

7. 次のコードの出力はどうなりますか?

function outer() {
  var x = 10;
  function inner() {
    var y = 5;
    console.log(x + y);
  }
  return inner;
}
var innerFunc = outer();
innerFunc(); // Output: 15
ログイン後にコピー

答え:
出力: 15
説明: 内部関数は外部関数からの x (10) と独自のスコープからの y (5) の両方にアクセスできるため、出力は 15 になります。

8. 次のコードの出力はどうなりますか?

function outer() {
  var x = 10;
  function inner() {
    var y = 5;
    console.log(x + y);
  }
  var x = 20;
  return inner;
}
var innerFunc = outer();
innerFunc();
ログイン後にコピー

答え:
出力: 25
説明: 変数 x は、内部関数が返される前に、外部関数内で 20 に再代入されます。 innerFunc が呼び出されると、x y (20 5 = 25) が記録されます。

9. 次のコードの出力はどうなりますか?

function outerFunction() {
  var outerVariable = "Hello, ";
  function innerFunction(name) {
    console.log(outerVariable + name);
  }
  return innerFunction;
}
var inner = outerFunction();
inner("John"); // Output: "Hello, John"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

答え:
出力:
ファーストコール: 15
2回目のコール: 25

説明: 最初の呼び出しでは、x は 10、y は 5 であるため、出力は 15 になります。x を 20 に更新した後、2 番目の呼び出しでは 20 5、つまり 25 が記録されます。

10. JavaScript でクロージャを使用するのはどのような場合ですか?

答え:
プライベート状態を維持する必要がある場合、またはグローバル スコープからアクセスできない変数をカプセル化する必要がある場合は、クロージャを使用します。これらは、特に特定の変数へのアクセスを制限し、それらの変数にアクセスまたは変更できる範囲を制御したい場合に、データ プライバシーの確立に役立ちます。

11. クロージャとコールバックとは何ですか?

答え:
クロージャとコールバックは、JavaScript における 2 つの異なる概念です。クロージャは、それが作成された環境を記憶する関数であり、関数が戻った後でも外部関数から変数にアクセスできます。一方、コールバックは、別の関数に引数として渡される関数であり、外側の関数が完了した後に実行されます。

12. 2 種類のクロージャとは何ですか?

答え:
JavaScript には、字句クロージャと動的クロージャの 2 種類のクロージャがあります。字句クロージャはコンパイル時に作成され、字句スコープ内の変数にアクセスできますが、動的クロージャは実行時に作成され、動的スコープ内の変数にアクセスできます。

13. Lambda はクロージャと同じですか?

**答え:*
JavaScript では、ラムダ関数は名前のないその場で作成される単なる匿名関数です。一方、クロージャは、外部関数が戻った後でも、外部関数からの変数へのアクセスを保持する関数です。ラムダ関数はクロージャを作成できますが、それらは同じではありません。

14. カリー化とクロージャの違いは何ですか?

答え:
カリー化とは、複数の引数を取る関数を、それぞれが 1 つの引数を取る一連の関数に変換するプロセスです。一方、クロージャは、外部関数のスコープから変数にアクセスできる関数です。カリー化ではクロージャを使用できますが、それらは異なる概念です。

15. クロージャはカプセル化と同じですか?

答え:
クロージャとカプセル化は関連していますが、同じではありません。カプセル化とは、データとそのデータを操作するメソッドを単一のユニット (多くの場合クラス) 内にバンドルし、オブジェクトのコンポーネントの一部へのアクセスを制限する概念を指します。クロージャには、外部関数から変数にアクセスできる関数が含まれます。クロージャはデータをカプセル化するために使用できますが、カプセル化と同義ではありません。

16. JavaScript は入れ子関数をサポートしていますか?それらはどのように機能するのでしょうか?

答え:
はい、JavaScript はネストされた関数をサポートしています。ネストされた関数は別の関数の内部で定義され、その外部関数の変数とパラメーターにアクセスできます。これにより、クロージャ、カプセル化、モジュール型コード構造が可能になります。

function outerFunction() {
  var outerVariable = "Hello, ";
  function innerFunction(name) {
    console.log(outerVariable + name);
  }
  return innerFunction;
}
var inner = outerFunction();
inner("John"); // Output: "Hello, John"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

17. JavaScript の語彙環境とは何ですか?

答え:
JavaScript では、字句環境は、変数バインディング、関数、および特定のスコープ内の値へのその他の参照を保持する構造です。これは JavaScript の実行コンテキストの重要な部分であり、実行時に変数がどのようにアクセスされ、解決されるかを決定するのに役立ちます。

18. ガベージ コレクションは、JavaScript のレキシカル環境およびネストされた関数とどのように連携しますか?

答え:
JavaScript におけるガベージ コレクションは、不要になったオブジェクトによって使用されていたメモリを再利用するプロセスです。関数が作成され、クロージャが形成されると、変数への参照を保存する字句環境により、クロージャが使用されなくなるまでメモリの収集が妨げられる場合があります。

function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}
var innerFunc = outer();
innerFunc();
ログイン後にコピー
ログイン後にコピー

19. JavaScript におけるクロージャの一般的な使用例は何ですか?

答え:
クロージャの一般的な使用例には、データのカプセル化、ファンクション ファクトリ、メモ化、デコレータの実装、非同期プログラミングでの状態の維持などがあります。

20. JavaScript でクロージャを使用する利点は何ですか?

答え:
JavaScript のクロージャには、プライバシー、関数ファクトリー、関数呼び出し間の状態を維持する機能など、いくつかの利点があります。これらにより、より強力で保守しやすいモジュール化されたコードが可能になり、JavaScript の関数型プログラミング パラダイムがサポートされます。

21. JavaScript でクロージャを使用する場合の欠点や落とし穴は何ですか?

答え:
クロージャを使用すると、クロージャが適切に管理されていない場合のメモリ リーク、変数への不要な参照のメモリ内での保持、意図しない外部変数の誤った変更などの潜在的な落とし穴につながる可能性があります。

22. クロージャは JavaScript のガベージ コレクション メカニズムにどのような影響を与えますか?

答え:
クロージャは、外部関数の実行が終了した後でも変数への参照をメモリ内に保持するため、ガベージ コレクションに影響を与えます。これにより、クロージャーが不要になったオブジェクトへの参照を保持している場合に、ガベージ コレクションによってメモリが解放されるのを防ぐことができます。

? LinkedIn で私とつながりましょう:

一緒にソフトウェア エンジニアリングの世界を深く掘り下げてみましょう!私は、JavaScript、TypeScript、Node.js、React、Next.js、データ構造、アルゴリズム、Web 開発などに関する洞察を定期的に共有しています。スキルを向上させたいと考えている場合でも、エキサイティングなトピックで共同作業したいと考えている場合でも、私はあなたとつながり、一緒に成長していきたいと思っています。

フォローしてください: ノジブル・イスラム

以上がJavaScript のクロージャ: インタビューでよくある質問と回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート