ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript では内部関数は常にクロージャになりますか?

JavaScript では内部関数は常にクロージャになりますか?

DDD
DDDオリジナル
2024-10-31 08:03:01561ブラウズ

Is an inner function always a closure in JavaScript?

JavaScript のクロージャと匿名関数

JavaScript では、内部関数が外部スコープの変数にアクセスできる場合、クロージャが発生します。外部関数の実行が完了しました。 JavaScript の多くの関数はクロージャと見なされますが、理論的には特定のサブセットのみが特に重要です。

ケース 1: 友達のコード

<code class="js">(function f() {
  var i2 = i;
  setTimeout(function g() {
    console.log(i2);
  }, 1000);
})();</code>
  • 関数 fは、自由変数が閉じられていないため、クロージャではありません。ただし、
  • 関数 g は自由変数 i2 のクロージャです。変数 i2 は g の作成時にキャプチャされます。

ケース 2: コード

<code class="js">setTimeout((function f(i2) {
  return function g() {
    console.log(i2);
  };
})(i), 1000);</code>
  • 関数 f はクロージャではありません。には自由変数がありません。
  • 関数 g は自由変数 i2 のクロージャです。変数 i2 は g の作成時にキャプチャされます。

結論

したがって、提供された両方の解決策において、内部関数 g はクロージャですが、クロージャではありません。外側のもの。これは、同じ結果が得られるにもかかわらず、異なるメカニズムを通じて達成されることを示しています。

以上がJavaScript では内部関数は常にクロージャになりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。