JavaScriptのクロージャとコールバックの説明例

黄舟
リリース: 2017-08-10 10:39:12
オリジナル
1152 人が閲覧しました

この記事では、主にjsクロージャとコールバック、クロージャの概念と特徴を説明し、例を用いて使用手順と方法を分析します

1.クロージャ

クロージャ(closure)はJavaScript言語の難しさです。これは、多くの高度なアプリケーションがクロージャに依存する特徴でもあります。

クロージャには 3 つの特徴があります:

1. 関数のネストされた関数;

2. パラメータと変数はガベージ コレクションによってリサイクルされません。機構も

クロージャは、別の関数のスコープ内の変数にアクセスできる関数を指します。クロージャを作成する最も一般的な方法は、関数内に別の関数を作成し、別の関数を通じてこの関数のローカル変数にアクセスすることです。クロージャを使用する利点と欠点の 1 つは、ローカル変数をメモリ内に常駐させることができ、グローバル変数を回避できることです。グローバル変数はすべてのモジュールで呼び出すことができますが、これは間違いなく悲惨な結果をもたらします。したがって、プライベートなカプセル化されたローカル変数を使用することをお勧めします。一般関数の実行後、ローカルのアクティブ オブジェクトは破棄され、グローバル スコープのみがメモリに保存されます。しかし、閉店の場合は状況が異なります。

例 1:

//クロージャは、戻り値が別の関数である関数です。

function outer(){
  var val = 0;
  return function (){
   val += 1;
   document.write(val + "<br />");
  };
}
var outObj = outer();
outObj();//1,执行val += 1后,val还在
outObj();//2
outObj = null;//val 被回收
var outObj1 = outer();
outObj1();//1
outObj1();//2
ログイン後にコピー

クロージャは、変数が常に格納されるようにします。不適切に使用すると、メモリの消費量が増加します (上記の例で、outer() を多数定義すると、多くの val 変数がメモリに格納されます)。


JavaScript のガベージ コレクションの原則:

(1) JavaScript では、オブジェクトが参照されなくなった場合、そのオブジェクトは GC によってリサイクルされます

(2) 2 つのオブジェクトが相互に参照している場合、 と がサードパーティによって参照されなくなった場合、相互に参照するこれら 2 つのオブジェクトもリサイクルされます。

それでは、クロージャを使用する利点は何でしょうか?クロージャを使用する利点は次のとおりです:

1. 変数がメモリ内に長期間存在することを期待します

2. グローバル変数の汚染を回避します

3. 2. コールバック

コールバック関数の原理: 私は今出発し、到着したら通知します。 これは、「出発」(関数の実行) のプロセス中に、「あなた」が実行できる処理です。何でも、そして「到着したら」(関数実行) 完了)後続の処理を「通知」(コールバック)

例 1:

function doSomething(callback){
  callback(1,2);
}
function numberAdd(a,b){
  document.write(a+b);
}
doSomething(numberAdd);//3
ログイン後にコピー

例 2:


function Thing(name){
  this.name = name;
}
ログイン後にコピー

//コンストラクターが使用される Thing クラスに doSomething メソッドを追加します。 呼び出し元の呼び出しパターン

Thing.prototype.doSomething = function(callback){
 callback(this.name);
};
function showName(name){
 document.write(name);
}
var t = new Thing("zhangsan");
t.doSomething(showName);//zhangsan
ログイン後にコピー

数値の配列がある場合、並べ替えのためのパブリック メソッドを書きたいのですが、並べ替えメソッド (小さいものから大きいものへ)もちろん、このソート メソッドはコールバックを使用して実装できます。1 つは小さいものから大きいものへのソート、もう 1 つは大きいものからのソートです。個人的には、コールバックは実際のビジネス開発エンジニアに決定権があると考えています。この種の考え方は、私たちが通常遭遇するものとは異なり、少し馴染みのないものです。 、ただし、この種の考え方は、特に非同期プログラミングでメリットが見られます。私の理解が正しいかどうかはわかりません。コールバックの典型的な使用例は次のとおりです。

以上がJavaScriptのクロージャとコールバックの説明例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!