Javascript設計モード(二)は閉鎖します.
1032 ワード
本文
クローズドの概念:
クローズドは、多くの変数を持っており、これらの変数を結びつける環境の表式であり、これらの変数もこの式の一部である.
最も一般的なクローズド
第一歩:関数を定義し、環境を設定し、スコープ(scope chain)を作成し、現在aをグローバル変数とすると、aのスコープチェーンにはwindowしかない.
第二ステップ:aを実行して、まずスコープ(a.scope=a)を作成し、活動対象を作成し、aの作用ドメインチェーンの先端にcalObjectを入れて、aの作用ドメインチェーンには2つのオブジェクト(aとwindow)が含まれている.
ステップ3:活動対象にアーグメンント属性を追加し、aを呼び出した時のパラメータ値を保存します.
第四ステップ:参照および内部変数を活動対象aに割り当てます.
javascriptGC原理:対象がもう引用されないなら、この対象はGCに回収されます.2つのオブジェクトが干渉なく相互参照されると、この2つのオブジェクトも回収されます.
まとめ:
1、まずaを定義する時、aの作用ドメインチェーン(scope chain)を作成しました.
2、(var b=a()を実行する場合、スコープa.scope=aを作成し、calObjectオブジェクトを作成してaを追加する作用領域において、
3、aオブジェクトにアーグメンント属性を追加し、iとreturn関数を活動対象に割り当てます.
4、aを実行する時にbをaのruturn関数値に指し、bでまた参照するaの中の局部変数iは、GCの回収基準に合致しないため、活動対象aは回収されていないので、bはiにアクセスするのは初めての対象であり、bでしかアクセスできない.
クローズドの概念:
クローズドは、多くの変数を持っており、これらの変数を結びつける環境の表式であり、これらの変数もこの式の一部である.
最も一般的なクローズド
function a() {
var i=0;
return function(){
alert(i++);
}
}
var b=a();
for(var i=0;i<3;i++){
b();
}
上のコードを説明する前に、関数の作成と実行を受け付けます.第一歩:関数を定義し、環境を設定し、スコープ(scope chain)を作成し、現在aをグローバル変数とすると、aのスコープチェーンにはwindowしかない.
第二ステップ:aを実行して、まずスコープ(a.scope=a)を作成し、活動対象を作成し、aの作用ドメインチェーンの先端にcalObjectを入れて、aの作用ドメインチェーンには2つのオブジェクト(aとwindow)が含まれている.
ステップ3:活動対象にアーグメンント属性を追加し、aを呼び出した時のパラメータ値を保存します.
第四ステップ:参照および内部変数を活動対象aに割り当てます.
javascriptGC原理:対象がもう引用されないなら、この対象はGCに回収されます.2つのオブジェクトが干渉なく相互参照されると、この2つのオブジェクトも回収されます.
まとめ:
1、まずaを定義する時、aの作用ドメインチェーン(scope chain)を作成しました.
2、(var b=a()を実行する場合、スコープa.scope=aを作成し、calObjectオブジェクトを作成してaを追加する作用領域において、
3、aオブジェクトにアーグメンント属性を追加し、iとreturn関数を活動対象に割り当てます.
4、aを実行する時にbをaのruturn関数値に指し、bでまた参照するaの中の局部変数iは、GCの回収基準に合致しないため、活動対象aは回収されていないので、bはiにアクセスするのは初めての対象であり、bでしかアクセスできない.