検索
ホームページウェブフロントエンドjsチュートリアル実際の例で JavaScript クロージャを理解する

Understanding JavaScript Closures with Real-World Examples

実際の例で JavaScript クロージャを理解する

クロージャは JavaScript で最も重要な概念の 1 つです。これらにより、関数は、外側の関数の実行が終了した後でも、その字句スコープへのアクセスを保持できるようになります。この一見抽象的な概念は、現実世界のプログラミングに強力に応用できます。

この記事では、簡単な説明、実用的な例、実際の使用例を使用してクロージャを詳しく説明し、理解を深めます。


クロージャとは何ですか?

クロージャは、内部関数が次の変数にアクセスできる JavaScript の機能です。

  1. 独自のスコープ
  2. 外部関数のスコープ。
  3. グローバル スコープ。

この概念を説明する簡単な例を次に示します。

function outerFunction(outerVariable) {
    return function innerFunction(innerVariable) {
        console.log(`Outer Variable: ${outerVariable}`);
        console.log(`Inner Variable: ${innerVariable}`);
    };
}

const newFunction = outerFunction("Hello");
newFunction("World");

出力::

外部変数: こんにちは
内部変数: World

この例では:

  • innerFunction は、outerFunction の実行が完了した後でも、outerVariable へのアクセスを保持します。これをクロージャと呼びます。

クロージャがなぜ役立つのか?

クロージャでは次のことが可能です:
• カプセル化: 変数をグローバル スコープから保護します。
• 状態管理: 関数呼び出し全体で状態を保持します。
• 高階関数: 動的な関数の動作を有効にします。

クロージャの実践例

1. カウンタ機能

クロージャを使用して、呼び出し間の状態を「記憶する」関数を作成できます。

function createCounter() {
    let count = 0;
    return function () {
        count++;
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // Output: 1
console.log(counter()); // Output: 2
console.log(counter()); // Output: 3

ここで、count 変数は createCounter 関数に対してプライベートであり、返された関数によってのみ変更できます。

2. 実際の例: 認証状態

クロージャは、ユーザー認証の追跡など、アプリケーションの状態の管理によく使用されます。

function authManager() {
    let isAuthenticated = false;

    return {
        login: function () {
            isAuthenticated = true;
            console.log("User logged in.");
        },
        logout: function () {
            isAuthenticated = false;
            console.log("User logged out.");
        },
        checkAuth: function () {
            console.log(`User is ${isAuthenticated ? "authenticated" : "not authenticated"}.`);
        },
    };
}

const auth = authManager();

auth.checkAuth(); // Output: User is not authenticated.
auth.login();     // Output: User logged in.
auth.checkAuth(); // Output: User is authenticated.
auth.logout();    // Output: User logged out.
auth.checkAuth(); // Output: User is not authenticated.

説明:

• The isAuthenticated variable is private and cannot be directly accessed from outside.
• The authManager function returns an object with methods (login, logout, and checkAuth) that interact with the private variable.
• This is a real-life use case of closures in state management, providing a secure way to handle data.

3. タイマーでのクロージャの使用

非同期プログラミングではクロージャが一般的です。たとえば、setTimeout:
を使用します。

function timer() {
    for (let i = 1; i 



<h3>
  
  
  なぜクロージャが重要なのでしょうか?
</h3>

<p>クロージャは、次のような理由から最新の JavaScript 開発に不可欠です。<br>
    • カプセル化: 機密変数を保護します。<br>
    • 状態管理: アプリケーションの状態を効率的に追跡します。<br>
    • 動的動作: 特定のユースケースに合わせた関数を返します。</p>

<h3>
  
  
  よくある落とし穴
</h3>

<p>クロージャーは強力ですが、特定の課題を引き起こす可能性があります。<br>
    1. メモリ リーク: クロージャが大きなオブジェクトへの参照を不必要に保持すると、メモリ使用量が増加する可能性があります。<br>
    2. スコープの問題: ループ内で var を使用すると、関数のスコープが原因で予期しない動作が発生する可能性があります。</p><h3>
  
  
  結論
</h3>

<p>クロージャは、強力かつ柔軟なプログラミング パターンを可能にする JavaScript の基本概念です。カウンタの作成、認証の管理、タイマーの操作のいずれの場合でも、クロージャはスコープと状態を処理するクリーンで効率的な方法を提供します。</p>

<h3>
  
  
  次は何ですか?
</h3>

<p>上記の例を自分のプロジェクトで試してみてください!クロージャの独特な使用方法はありますか?以下のコメント欄であなたの洞察を共有してください。 ?</p>


          

            
        

以上が実際の例で JavaScript クロージャを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール