この例を見ると、私たちがouterFunction = null
;を設定したときに何が起こっているのかを理解するのが難しいです。私の最初の考えは、function outerFunction(){ //nothing }
です。しかし、referenceToInnerFunction
を呼び出すと、我々はまだ猿の値を得ることができます。私はこれがスコープと関係があると確信していますが、私はそれの周りに私の頭を包むことはできません。私はreferenceToInnerFunction
を呼び出すときに、私もnull
を得るようにするJavaScriptの近代的な実装のmonkey?
閉鎖の例を分析する
function outerFunction() {
var outerVar = "monkey";
function innerFunction() {
return outerVar;
}
return innerFunction;
}
var referenceToInnerFunction = outerFunction();
alert(referenceToInnerFunction());
outerFunction = null;
alert(referenceToInnerFunction());
クロージャは、内部関数コードがその外側スコープ変数にアクセスするときに作成されるスコープです.'innerFunction'は常にそのクロージャでouterVarへのアクセスを持ちます。 outerFunctionをnullに設定した場合でも –
内部関数への参照を 'var referenceToInnerFunction = outerFunction();'で作成するので、アクセス可能になります。それはすべての参照についてです。 – scriptmonster
だから私はoutFunctionの中に別の10個の関数を入れ子にします。それらのすべてがnullに設定されていて、innerFunctionがまだ定義されていても、それは10個の関数と外側スコープのすべてにアクセスできますか? –