クロージャは JavaScript の強力で重要な機能であり、多くの初心者が苦労しています。これらは、関数呼び出し全体での状態の保存やプライベート変数の作成など、JavaScript の最も便利な機能のいくつかを担当します。このブログでは、クロージャを簡単な言語に分解し、その重要性を実際の例とともに説明することでクロージャを説明しようとします。
?クロージャとは何ですか?
JavaScript で関数が別の関数から返されると、その関数は親関数のスコープを継承します。これは、返された関数は、外部関数の実行が完了した後でも、外部関数のスコープ内で定義された変数にアクセスできることを意味します。 クロージャは、関数とそれを囲むスコープの組み合わせです。
より簡単な定義は次のとおりです:
- クロージャーは、外側 (囲んでいる) 関数のスコープからの変数を「記憶」する関数です。
- これにより、外部関数が実行されなくなった場合でも、内部関数がこれらの変数にアクセスできるようになります。
?クロージャの仕組み: 例
?クロージャなしの例
function outer(){ let counter = 0 function inner(){ counter++ console.log("counter = " + counter) } inner() } outer() outer() /* Output: counter = 1 counter = 1 */
?クロージャ
を使用した例
function outer(){ let counter = 0 function inner(){ counter++ console.log("counter = " + counter) } return inner } const fn = outer() fn() fn() /* Output: counter = 1 counter = 2 */
?クロージャの主な特徴
- 永続メモリ: 外部関数のスコープ内の変数は、外部関数が終了した後もずっと「記憶」されます。
- 字句スコープ: クロージャは、関数が実行される場所ではなく、関数が定義される場所に基づきます。
- 複数のインスタンス: 各クロージャ インスタンスは、外部変数の独自のコピーを保存します。
?複数のインスタンスの例:
function counterFunction() { let count = 0; return function increment() { count++; return count; }; } const counter1 = counterFunction(); const counter2 = counterFunction(); console.log("counter1 = " + counter1()); // Output: 1 console.log("counter1 = " + counter1()); // Output: 2 console.log("counter2 = " + counter2()); // Output: 1 console.log("counter1 = " + counter1()); // Output: 3 console.log("counter2 = " + counter2()); // Output: 2
ここで、counter1 と counter2 はそれぞれ独自の個別のカウント変数を持ちます。
?クロージャーの実際的な使用法
1️⃣ データ プライバシー: クロージャは変数をグローバル スコープから隠すことができるため、変数は特定の関数内でのみ使用できます。
?例:
function secretInfo() { let secret = "I love JavaScript"; return { getSecret: function() { return secret; }, setSecret: function(newSecret) { secret = newSecret; } }; } const secretObject = secretInfo(); console.log(secretObject.getSecret()); // Output: I love JavaScript secretObject.setSecret("I love Python too!"); console.log(secretObject.getSecret()); // Output: I love Python too! secretObject.setSecret("I love PHP too!"); console.log(secretObject.getSecret()); // Output: I love PHP too! // Attempting to Access secret Directly will not work console.log(secretObject.secret); // Output: undefined
✍️ このコードがデータ プライバシーを示す方法:
- グローバル スコープ保護: 変数シークレットには、グローバル スコープやコードの他の部分から直接アクセスできません。たとえば、console.log(secretObject.secret) を試行すると、未定義が返されます。
- プライベート状態のメンテナンス: クロージャの変数 Secret はプライベートであり、getSecret メソッドと setSecret メソッドを使用してのみ読み取りまたは変更できます。
- アクセスの制御: プログラムは関数 getSecret および setSecret を定義することで、シークレット変数へのアクセスを制限します。
2️⃣ 関数ファクトリー: 関数ファクトリー は、新しい関数を生成して返す関数です。これにより、入力パラメータに基づいてカスタマイズされた機能を動的に構築できるようになります。
?例:
function outer(){ let counter = 0 function inner(){ counter++ console.log("counter = " + counter) } inner() } outer() outer() /* Output: counter = 1 counter = 1 */
✍️ このコードで関数ファクトリーを紹介する方法:
- 計算関数は工場のように動作し、入力 (因数) に基づいて特殊な乗算関数 (2 倍、3 倍) を生成します。
- 各関数は独自で独立していますが、同じコア ロジックを共有します。
3️⃣ イベント リスナー: クロージャは、状態を維持するためにコールバックとイベント リスナーでよく使用されます。
?例:
function outer(){ let counter = 0 function inner(){ counter++ console.log("counter = " + counter) } return inner } const fn = outer() fn() fn() /* Output: counter = 1 counter = 2 */
✍️ このコードは、イベント リスナーでクロージャがどのように機能するかを示しています:
- setupListener 関数はクロージャを作成し、その中に clickCount 変数を定義します。
- コールバックであるイベント リスナー関数は、setupListener メソッドの実行が終了した後でも clickCount にアクセスできます。
- ID「myButton」のボタンがクリックされるたびに、イベント リスナーのコールバックは clickCount を増分し、更新された値をログに記録します。
?結論
クロージャは JavaScript の基本的な考え方であり、開発者がよりモジュール化された効率的でプライベートなコードを構築できるようになります。クロージャを理解すると、動的関数を記述し、永続的な状態を維持し、データのカプセル化を実現できるようになります。
初心者として、クロージャの練習と実験に時間を費やしてください。最初は難しそうに見えるかもしれませんが、実際の例と使用法を読めば、すぐに JavaScript プログラミングにおけるその驚くべき強みと多用途性に気づくでしょう。
クロージャの学習に役立つ実際の例えや例はありますか?以下のコメントセクションで共有してください!
コーディングを楽しんでください! ✨
以上がJavaScript クロージャ: 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

単純なJavaScript関数は、日付が有効かどうかを確認するために使用されます。 関数isvaliddate(s){ var bits = s.split( '/'); var d = new Date(bits [2] '/' bits [1] '/'ビット[0]); return !!(d &&(d.getmonth()1)== bits [1] && d.getdate()== number(bits [0])); } //テスト var

この記事では、jQueryを使用して、DOM要素の内側のマージン値とマージン値、特に外側の縁と要素の内側の縁の特定の位置を取得して設定する方法について説明します。 CSSを使用して要素の内側と外側の縁を設定することは可能ですが、正確な値を取得するのは難しい場合があります。 // 設定 $( "div.header")。css( "margin"、 "10px"); $( "div.header")。css( "padding"、 "10px"); このコードはそうだと思うかもしれません

この記事では、10個の例外的なjQueryタブとアコーディオンについて説明します。 タブとアコーディオンの重要な違いは、コンテンツパネルの表示方法と非表示にあります。これらの10の例を掘り下げましょう。 関連記事:10 jQueryタブプラグイン

ウェブサイトのダイナミズムと視覚的な魅力を高めるために、10の例外的なjQueryプラグインを発見してください!このキュレーションされたコレクションは、画像アニメーションからインタラクティブなギャラリーまで、多様な機能を提供します。これらの強力なツールを探りましょう。 関連投稿: 1

HTTP-Consoleは、HTTPコマンドを実行するためのコマンドラインインターフェイスを提供するノードモジュールです。 Webサーバー、Web Servに対して作成されているかどうかに関係なく、HTTPリクエストで何が起こっているかをデバッグして正確に確認するのに最適です

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

次のjQueryコードスニペットを使用して、Divコンテンツがコンテナ要素領域を超えたときにスクロールバーを追加できます。 (デモンストレーションはありません、それを直接firebugにコピーしてください) // d =ドキュメント // w =ウィンドウ // $ = jQuery var contentarea = $(this)、 wintop = contentarea.scrolltop()、 docheight = $(d).height()、 winheight = $(w).height()、 divheight = $( '#c


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール
