JavaScript学習総括2:js閉包(Closere)概念
1221 ワード
クローズドの二つの特徴:
1、関数変数の1つの参照として、関数が返されると、アクティブ状態になります.
2、一つのクローズドは、一つの関数が戻った時に、リソースを解放していないスタックエリアです.
概念記述(個人的な理解は参考のみ):
関数がネストされて他の関数がネストされると、それらを外層関数とインライン関数と呼ぶことができます.埋め込み関数は、外層関数で定義された変数(局所変数)にアクセスできます.インライン関数が外層関数の変数を使用したと仮定して、インライン関数を外層関数の戻り値として使用すると、外界から外層関数を介してインライン関数の参照を得ることができます.外界は外層関数を通して埋め込み関数の参照を得た後、外層関数の役割は完成しました.伝統的な言語では外層関数で定義されている局所変数を解放しますが、JavaScriptでは閉込めません.埋め込み関数は外殻関数の局所変数をロックし、外界から埋め込み関数への参照が終わるまで変数を解放します.クローズドバックが根本的に実現できるのはJavaScriptが解釈実行され、コード全体をスキャンします.外部に埋め込み関数が使用されている限り、埋め込み関数が使用する外層関数の変数は解放されません.埋め込み関数が参照されるまでは.多くの概念を言って抽象的です.もう一つの例+完璧な注釈をつければ、何でも分かります.
実際のアプリケーション:
私も初学なので、まだこの东を闭じて何の役に立つことがありますかを知りません.....実用的な例を挙げることができないので、もう研究しないと叱られます.でも、こういうコーナーがあるはずです.席を取りましょう.
1、関数変数の1つの参照として、関数が返されると、アクティブ状態になります.
2、一つのクローズドは、一つの関数が戻った時に、リソースを解放していないスタックエリアです.
概念記述(個人的な理解は参考のみ):
関数がネストされて他の関数がネストされると、それらを外層関数とインライン関数と呼ぶことができます.埋め込み関数は、外層関数で定義された変数(局所変数)にアクセスできます.インライン関数が外層関数の変数を使用したと仮定して、インライン関数を外層関数の戻り値として使用すると、外界から外層関数を介してインライン関数の参照を得ることができます.外界は外層関数を通して埋め込み関数の参照を得た後、外層関数の役割は完成しました.伝統的な言語では外層関数で定義されている局所変数を解放しますが、JavaScriptでは閉込めません.埋め込み関数は外殻関数の局所変数をロックし、外界から埋め込み関数への参照が終わるまで変数を解放します.クローズドバックが根本的に実現できるのはJavaScriptが解釈実行され、コード全体をスキャンします.外部に埋め込み関数が使用されている限り、埋め込み関数が使用する外層関数の変数は解放されません.埋め込み関数が参照されるまでは.多くの概念を言って抽象的です.もう一つの例+完璧な注釈をつければ、何でも分かります.
<script type="text/javascript">
function fun1() //fun1
{
var str = " ";
return function (){alert(str);};// ( ),
// fun1 str, str 。 return, fun1
}
var fun2 = fun1();//fun2 ( ), fun2 fun1
alert(" !");
fun2();// fun2,
</script>
この例の出力の結果は、「外層関数の実行が完了しました!」「中国を愛しています.」fun 1におけるstr局所変数が解放されていないことを証明した.実際のアプリケーション:
私も初学なので、まだこの东を闭じて何の役に立つことがありますかを知りません.....実用的な例を挙げることができないので、もう研究しないと叱られます.でも、こういうコーナーがあるはずです.席を取りましょう.