次のクロージャー問(wèn)題を參照してください
リーリー出力は 20 ではなく 10 です。x が値を取得するとき、スコープ チェーンに沿って検索していませんか? 関數(shù)の作成時(shí)にスコープ チェーンが決定されている場(chǎng)合、結(jié)果は 10 になります。関數(shù)が呼び出されたときに決定され、20 になるはずです。スコープ チェーンに関する正確な記述はありますか?ここでの正確なスコープチェーンはどのようにあるべきでしょうか? fn と show は同じレベルですか、それとも fn は show 內(nèi)にありますか?
溫故而知新,可以為師矣。 博客:www.ouyangke.com
スコープチェーンは関數(shù)の定義時(shí)に決定されます。
変數(shù)は関數(shù)のドメイン內(nèi)でのみ定義されるため、関數(shù)內(nèi)で定義された変數(shù)には関數(shù)の外部からはアクセスできません。同様に、関數(shù)は、そのスコープ內(nèi)で定義された任意の変數(shù)および関數(shù)にアクセスできます。つまり、グローバル スコープで定義された関數(shù)は、グローバル スコープで定義されたすべての変數(shù)にアクセスできます。別の関數(shù)內(nèi)で定義された関數(shù)は、その親関數(shù)で定義されたすべての変數(shù)、および親関數(shù)がアクセスできるその他の変數(shù)にもアクセスできます。
https://developer.mozilla.org...
スコープチェーンは動(dòng)的であるため、呼び出し時(shí)に決定されます。
しかし、あなたのコードでは、クロージャによって定義された function() はバインディングの最も外側(cè)のスコープです
function によって宣言された関數(shù)は、デフォルトでバインディングの最も外側(cè)のスコープになります
(私も勉強(qiáng)中です…)
関數(shù)の作成時(shí)にグローバル変數(shù)オブジェクトを含むスコープ チェーンを作成し、それを內(nèi)部の [[Scope]] 屬性に保存します。関數(shù)が実行されると、[[Scope]] 屬性內(nèi)のオブジェクトをコピーすることによって実行環(huán)境が作成され、実行環(huán)境のスコープ チェーンが構(gòu)築され、獨(dú)自のアクティブ オブジェクトがフロントエンドにプッシュされます。スコープ チェーンを使用して完全な関數(shù)を形成します。 [[Scope]] は、値のコピーではなく、グローバル変數(shù)への參照を保持します。
リーリークロージャの呼び出しメソッドは次の効果と同等です。以下の例は、スコープチェーンが関數(shù)定義時(shí)の位置に関連していることを比較して示しています。
リーリー関連する質(zhì)問(wèn)のリンクを追加しました。 /q/10…。スコープチェーンについての議論があります。