クローズドとは何ですか?どうして使いますか?
2983 ワード
上のテーマです.変形します.
はい、上記のコースを理解しました.以下に閉包を説明してください.
クローズドとは、他の関数の内部変数を読み取る機能です.
Javascript言語では、関数内部のサブ関数だけが局所変数を読み取ることができるので、クローズドを単に「関数の内部に定義された関数」と理解することができます.関数内部の変数 を読みだします.は、これらの変数の値を常にメモリに保持させる.
上のコードを修正します.
上のaddが受け入れるのも匿名関数であり、その匿名関数自体もクローズドされているので、外部で変数を操作しても良い.
注意点 はメモリ漏れの原因となります. クローズドは、内部変数の値を変更するので、クローズドが対象となるパブリックメソッドを使用する際には、慎重にする必要があります.クローズドされたアプリケーションの一例 単一の例のパターンの定義は、クラスを生成する唯一の例である.
一例モードはjsの中でよく会います.例えば、var a={}実は一例です.
しかし、より意味のある一例を書きます.
var x = 0;
var foo = {
x:1,
bar:function () {
console.log(this.x);
var that = this;
return function () {
console.log(this.x)
console.log(that.x)
}
}
}
foo.bar() // 1
foo.bar()() // this: 0, that: 1
上記の例ではba'rに匿名関数を返しましたが、この匿名関数は外部で呼び出されます.即ち、foo.bar()はbarの実行コンテキストの変数オブジェクトthatに読み込まれて、この関数は一つのクローズドを形成します.はい、上記のコースを理解しました.以下に閉包を説明してください.
クローズドとは、他の関数の内部変数を読み取る機能です.
Javascript言語では、関数内部のサブ関数だけが局所変数を読み取ることができるので、クローズドを単に「関数の内部に定義された関数」と理解することができます.
var x = 0;
var bar:function () {
var n = 999;
return function () {
return n;
}
}
var outer = bar();
outer() // 999
用途:上のコードを修正します.
var add;
var bar = function () {
var n = 999;
add = function () {
n += 1;
}
return function () {
return n;
}
}
var outer = bar();
outer() // 999
add();
outer(); // 1000
nはずっとメモリに保存されていますが、bar()の実行が完了してから廃棄されません.原因:barの中の匿名関数はouterに割り当てられました.これはouterが破壊されていない時に、この匿名関数はずっとメモリに存在しています.匿名関数の存在はbarに依存しています.だからbarはメモリに全部使わなければなりません.だからbarは呼び出しが終わった後にゴミ回収機構を作ることはできません.上のaddが受け入れるのも匿名関数であり、その匿名関数自体もクローズドされているので、外部で変数を操作しても良い.
注意点
一例モードはjsの中でよく会います.例えば、var a={}実は一例です.
しかし、より意味のある一例を書きます.
var singleton = function( fn ){
var result;
return function(){
return result || ( result = fn .apply( this, arguments ) );
}
}
もっと簡潔に:var singleton = (function () {
var instance;
return function (object) {
if(!instance){
instance = new object();
}
return instance;
}
})();