質問:
JavaScript のクロージャについての議論の中で、ある友人が次のように主張しました。彼らの実装にはクロージャが欠けていましたが、もう一方は反対のことを主張していました。クロージャの概念を適用して、どのソリューションがクロージャを使用しているかを判断できますか?
解決策:
クロージャ定義: JavaScript のクロージャは、別のスコープから参照される自由変数 (親スコープで定義された変数) を持つ関数のサブセット。クロージャが親スコープの外で参照されると、そのスコープから上位値 (自由変数) を超えてクローズされます。
ケース 1: 友達のプログラム
<code class="js">for (var i = 0; i < 10; i++) { (function f() { var i2 = i; setTimeout(function g() { console.log(i2); }, 1000); })(); }</code>
分析:
ケース 2: プログラム
<code class="js">for (var i = 0; i < 10; i++) { setTimeout((function f(i2) { return function g() { console.log(i2); }; })(i), 1000); }</code>
分析:
結論:
あなたもあなたの友人も、実装でクロージャを使用しています。違いは、友人のプログラムではクロージャが内部関数 g 内で作成されるのに対し、あなたのプログラムではクロージャが外部関数 f 内で作成されることです。
以上があなたの友人の JavaScript コードは実際にクロージャを使用していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。