JavaScriptのクロージャの説明
1. クロージャとは?
クロージャ。関数そのものと、その関数が宣言された環境の状態の組み合わせ。
/{br これは、関数が定義された環境で呼び出されなくても、その関数が定義された環境の変数にアクセスできることを意味します。
つまり、クロージャを使えば、データとそのデータを操作する関数を関連付けることができるのです。
例として
$ hg ci
abort: no username supplied (see "hg help config")
これはfooのクロージャの例で、関数が返されるので、この関数はfooの内部スコープであるaをカバーするクロージャを持ち、aを生かしてfooの終わりでリサイクルされないようにしているのです。
2. クロージャができること
2.1) 記憶力
クロージャのニーモニック性とは
クロージャが生成されると、その関数が置かれている環境の状態は常にメモリ内に残り、外側の関数呼び出しの終了時にガベージコレクション機構によって再利用されることはありません。
例として
$ cd .hg
画像
aはクロージャの一部なので、クロージャが作られたときのaの環境の状態はメモリ上に残り、外側の関数呼び出しの終了とともにクリアされないので、foo1が使われると、メモリ上でaの値に1が加算されることになります。
そうすると、foo1とfoo2が生成するクロージャは、互いに影響を及ぼさない別々のクロージャになります。つまり、2回目にfoo2が呼ばれたときには、自分自身の最初の呼び出しの後の結果に1が追加されるわけです。
2.2) プライベート変数のシミュレート
指定された操作によってのみ、変数が操作できることを保証する。
例として :
$ vi hgrc
---------------------------------------------------------------
The contents of hgrc's file.
[paths]
default = http://javaforge.com/hg/HelloWorld
画像
クロージャは、Aが指定されたプラス1およびマイナス1の操作によってのみ操作できることを保証する。
3. クロージャーの注意点
クロージャを乱用すると、メモリの過剰使用によるページのパフォーマンス低下や、メモリリークを引き起こす可能性があります。
概要
この記事はこれで終わりです。この記事があなたの助けになることを願っていますし、BinaryDevelopの他のコンテンツにももっと注目していただければと思います
関連
-
JavaScriptの関数この指摘の問題を説明
-
JSアレイループと効率解析の比較
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
JavaScriptの配列共通メソッド解説
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
JavaScriptのStringに関する共通メソッド
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueでルートネスティングを実装する例
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
ウィンドウが定義されていない
-
フロントエンド - $(...) [0].attr は関数ではありません。