「実体関連する基準関数と環境の構成要素によって閉鎖」は、簡単に言えば、外部関数に関数の定義内にネストされ、関数は、関数のローカル変数の外に参照され、アウター呼び出し元に戻り値の関数として、内層機能、戻り値は、閉鎖され
例:
DEF :(x)は、外側 DEF 内側(): 非局所X 、X + = 1 戻りxが 返さインナー
上記呼び出された外側閉鎖リターン機能を与えるネストされた関数であり、閉鎖インナー(関数を含む)、および外部変数Xの参照機能、クロージャは可変であるオブジェクトでありますオブジェクトの内部のメンバーに相当
閉鎖次のコードを呼び出すために実行されたとき、例えば
=外(1 ) B =外(2 ) プリント(()、B()) プリント(()、B())
結果は次のようになります。
2 3 3 4
その理由は単純で、クロージャオブジェクトであり、BはABは単に閉鎖オブジェクトの同じ「タイプ」で、それらの間には関係がない、閉鎖オブジェクトであり、そして場合呼び出し、xの閉鎖部材値プラス1、一方X部材Bの閉鎖には影響しない、BときのみB、Xプラス1、及び最初のコールの前に時間のために閉鎖する第2の呼が、追加された1内のメンバーへのコールので、再び呼び出さと共感B、1を追加
別のケース
DEF 外側(): FS = [] のための I における範囲(3 ): DEF 内側(): 戻りiは fs.append(内側) リターンFS 、B、C = 外側() プリント(()、B() 、C())
所望の結果は、2、2、1、0〜2であり、及び2の実績
その理由は単純で、閉鎖はタイムアウト関数の戻り値を生成することである関数の戻り値の外側のケースが戻りクロージャを満たすために発見されたとき、それは外側の閉鎖にバインドされたローカル変数クローズ機能のために必要となりますクロージャを返すように生成されるためときに閉鎖基準値がかなり時間アペンドの値より、内部変数の戻り値である場合、そのよう