ホームページ ウェブフロントエンド jsチュートリアル jsのclosure_javascriptスキルの活用場面とメリット・デメリットの分析

jsのclosure_javascriptスキルの活用場面とメリット・デメリットの分析

May 16, 2016 pm 03:53 PM
js 長所と短所 閉鎖

最初にコード:

//函数a
function a()
{
var i=0;
//函数b
function b()
{
alert(++i);
}
return b;
}
//函数c
var c = a();
c();

ログイン後にコピー

コードの機能:

1. 関数 b は関数 a 内にネストされています。 2. 関数 a は関数 b を返します。
コード中の関数 a の内部関数 b が、関数 a の外部の変数 c によって参照されることを、クロージャを作成するといいます。場合によっては、関数 b は匿名関数、つまり return function(){};
によって返されることもあります。

利点: 1. 関数内の変数のセキュリティを保護し、カプセル化を強化します。 2. 変数をメモリに保持します (使いすぎるとデメリットになり、メモリを占有します)。 クロージャがリソースを占有する理由は、関数 a が終了しても、b の実行は a の変数に依存するため、関数 a が終了しても変数 i は破棄されないためです。
このシナリオには適していません: クロージャを返す関数は非常に大きな関数です

クロージャの典型的なフレームワークは jquery です。

クロージャは JavaScript 言語の主要な機能です。クロージャの主な用途は、プライベート メソッドと変数を設計することです。

これは、フレームワークを作成するときにより明白になります。一部のメソッドと属性は操作ロジック プロセスでのみ使用されるため、メソッドへのアクセスのみを提供するクロージャーを設計できます。

クロージャの欠点は、クロージャがメモリに常駐するため、不適切に使用するとメモリ リークが発生しやすいことです。

要約すると、

利点:

1. 論理的な連続性。クロージャが別の関数呼び出しのパラメータとして使用される場合、現在のロジックから離れて追加のロジックを個別に記述することができなくなります。

2. コンテキストのローカル変数の呼び出しを容易にします。
3. カプセル化を強化することで、ポイント 2 を拡張して変数を保護できます。

欠点:

クロージャには、メモリの浪費という非常に深刻な問題があります。このメモリの浪費は、メモリに常駐しているためだけではなく、さらに重要なことに、クロージャを不適切に使用すると無効なメモリが生成されるということです。以下の例を参照してください。 :

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

ログイン後にコピー
上記のテストを通じて、abc() を 1 万回実行して生成された同じ論理クロージャーのアドレスが同じではないことがわかります。これは、同一の Function オブジェクトが多数生成されることを意味します。ファクトリモードを利用して関数を生成して使用できるのが利点ですが、誤って通常のロジックとしてクロージャを使用すると、必然的にメモリのゴミが発生します。構文を変更すると理解しやすくなるかもしれません:

var foo = new Function();

ログイン後にコピー
私自身の習慣に関する限り、クロージャについては、使用する必要がある場合は、クロージャ オブジェクトの数を少なくするか、一意に保つ方法を見つけてください。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

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

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ ラムダ式におけるクロージャの意味は何ですか? C++ ラムダ式におけるクロージャの意味は何ですか? Apr 17, 2024 pm 06:15 PM

C++ では、クロージャは外部変数にアクセスできるラムダ式です。クロージャを作成するには、ラムダ式の外部変数をキャプチャします。クロージャには、再利用性、情報の隠蔽、評価の遅延などの利点があります。これらは、イベント ハンドラーなど、外部変数が破棄されてもクロージャが外部変数にアクセスできる現実の状況で役立ちます。

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

システム購入前に必ずお読みください: Win11 と Win10 の長所と短所の分析 システム購入前に必ずお読みください: Win11 と Win10 の長所と短所の分析 Mar 28, 2024 pm 01:33 PM

情報化社会の今日、パソコンは私たちの生活に欠かせないツールとして重要な役割を果たしています。オペレーティング システムはコンピュータの中核ソフトウェアの 1 つであり、私たちの使用体験や作業効率に影響を与えます。市場では、Microsoft の Windows オペレーティング システムが常に支配的な地位を占めており、現在、人々は最新の Windows 11 と古い Windows 10 の選択に直面しています。一般の消費者は、オペレーティング システムを選択するときに、バージョン番号だけではなく、その長所と短所も理解します。

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレート化: 長所と短所 テンプレート化は、再利用可能なコード ブロックを作成できる強力なプログラミング手法です。これにはさまざまな利点がありますが、いくつかの欠点もあります。長所: コードの再利用性: テンプレートを使用すると、アプリケーション全体で再利用できる共通のコードを作成できるため、重複やメンテナンスの労力が軽減されます。一貫性: テンプレート化により、コード スニペットが異なる場所でも同じ方法で実装されるようになり、コードの一貫性と読みやすさが向上します。保守性: テンプレートへの変更は、それを使用するすべてのコードに同時に反映されるため、保守と更新が簡素化されます。効率: テンプレートを作成すると、同じコードを何度も記述する必要がないため、時間と労力が節約されます。柔軟性: テンプレートを使用すると、さまざまなアプリケーションのニーズに簡単に適応できる構成可能なコード ブロックを作成できます。欠点がある

Java サーブレットの仕組みの長所と短所は何ですか? Java サーブレットの仕組みの長所と短所は何ですか? Apr 16, 2024 pm 03:18 PM

JavaServlet は、動的 Web ページの構築に使用される Java クラスで、クライアントとサーバー間のブリッジとして機能します。動作原理: リクエストの受信、サーブレットの初期化、リクエストの処理、応答の生成、サーブレットの終了。長所: ポータブル、拡張性があり、安全で使いやすい。短所: オーバーヘッド、結合、および状態管理。実際のケース: 「Hello, Servlet!」メッセージを表示する単純なサーブレットを作成します。

C++ラムダ式でクロージャを実装するにはどうすればよいですか? C++ラムダ式でクロージャを実装するにはどうすればよいですか? Jun 01, 2024 pm 05:50 PM

C++ ラムダ式は、関数スコープ変数を保存し、関数からアクセスできるようにするクロージャーをサポートしています。構文は [キャプチャリスト](パラメータ)->戻り値の型{関数本体} です。 Capture-list は、キャプチャする変数を定義します。[=] を使用してすべてのローカル変数を値によってキャプチャするか、[&] を使用してすべてのローカル変数を参照によってキャプチャするか、[variable1, variable2,...] を使用して特定の変数をキャプチャできます。ラムダ式はキャプチャされた変数にのみアクセスできますが、元の値を変更することはできません。

C++ 関数におけるクロージャの長所と短所は何ですか? C++ 関数におけるクロージャの長所と短所は何ですか? Apr 25, 2024 pm 01:33 PM

クロージャは、外部関数のスコープ内の変数にアクセスできる入れ子関数です。その利点には、データのカプセル化、状態の保持、および柔軟性が含まれます。デメリットとしては、メモリ消費量、パフォーマンスへの影響、デバッグの複雑さなどが挙げられます。さらに、クロージャは匿名関数を作成し、それをコールバックまたは引数として他の関数に渡すことができます。

PHP フレームワークの長所と短所の比較: どちらが優れていますか? PHP フレームワークの長所と短所の比較: どちらが優れていますか? Jun 04, 2024 pm 03:36 PM

PHP フレームワークの選択は、プロジェクトのニーズと開発者のスキルによって異なります。 Laravel: 豊富な機能と活発なコミュニティがありますが、学習曲線が急で、パフォーマンスのオーバーヘッドが高くなります。 CodeIgniter: 軽量で拡張が簡単ですが、機能が制限されており、ドキュメントが少なくなります。 Symfony: モジュール式の強力なコミュニティですが、複雑なパフォーマンスの問題があります。 ZendFramework: エンタープライズ グレードで、安定性と信頼性が高くなりますが、ライセンスが大きく高価です。スリム: マイクロフレームワークで高速ですが、機能が限られており、学習曲線が急です。

See all articles