84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
次のクロージャー問題を参照してください
出力は 20 ではなく 10 です。x が値を取得するとき、スコープ チェーンに沿って検索していませんか? 関数の作成時にスコープ チェーンが決定されている場合、結果は 10 になります。関数が呼び出されたときに決定され、20 になるはずです。スコープ チェーンに関する正確な記述はありますか?ここでの正確なスコープチェーンはどのようにあるべきでしょうか? fn と show は同じレベルですか、それとも fn は show 内にありますか?
温故而知新,可以为师矣。 博客:www.ouyangke.com
スコープチェーンは関数の定義時に決定されます。
変数は関数のドメイン内でのみ定義されるため、関数内で定義された変数には関数の外部からはアクセスできません。同様に、関数は、そのスコープ内で定義された任意の変数および関数にアクセスできます。つまり、グローバル スコープで定義された関数は、グローバル スコープで定義されたすべての変数にアクセスできます。別の関数内で定義された関数は、その親関数で定義されたすべての変数、および親関数がアクセスできるその他の変数にもアクセスできます。 https://developer.mozilla.org...
変数は関数のドメイン内でのみ定義されるため、関数内で定義された変数には関数の外部からはアクセスできません。同様に、関数は、そのスコープ内で定義された任意の変数および関数にアクセスできます。つまり、グローバル スコープで定義された関数は、グローバル スコープで定義されたすべての変数にアクセスできます。別の関数内で定義された関数は、その親関数で定義されたすべての変数、および親関数がアクセスできるその他の変数にもアクセスできます。
スコープチェーンは動的であるため、呼び出し時に決定されます。 しかし、あなたのコードでは、クロージャによって定義された function() はバインディングの最も外側のスコープです function によって宣言された関数は、デフォルトでバインディングの最も外側のスコープになります
(私も勉強中です…)
関数の作成時にグローバル変数オブジェクトを含むスコープ チェーンを作成し、それを内部の [[Scope]] 属性に保存します。関数が実行されると、[[Scope]] 属性内のオブジェクトをコピーすることによって実行環境が作成され、実行環境のスコープ チェーンが構築され、独自のアクティブ オブジェクトがフロントエンドにプッシュされます。スコープ チェーンを使用して完全な関数を形成します。 [[Scope]] は、値のコピーではなく、グローバル変数への参照を保持します。
クロージャの呼び出しメソッドは次の効果と同等です。以下の例は、スコープチェーンが関数定義時の位置に関連していることを比較して示しています。
関連する質問のリンクを追加しました。 /q/10…。スコープチェーンについての議論があります。
非厳密モードでは、IIFE のこのポイントは window です
上記は正しくありません。 。 。
スコープチェーンは関数の定義時に決定されます。
スコープチェーンは動的であるため、呼び出し時に決定されます。
しかし、あなたのコードでは、クロージャによって定義された function() はバインディングの最も外側のスコープです
function によって宣言された関数は、デフォルトでバインディングの最も外側のスコープになります
(私も勉強中です…)
関数の作成時にグローバル変数オブジェクトを含むスコープ チェーンを作成し、それを内部の [[Scope]] 属性に保存します。関数が実行されると、[[Scope]] 属性内のオブジェクトをコピーすることによって実行環境が作成され、実行環境のスコープ チェーンが構築され、独自のアクティブ オブジェクトがフロントエンドにプッシュされます。スコープ チェーンを使用して完全な関数を形成します。 [[Scope]] は、値のコピーではなく、グローバル変数への参照を保持します。
リーリークロージャの呼び出しメソッドは次の効果と同等です。以下の例は、スコープチェーンが関数定義時の位置に関連していることを比較して示しています。
リーリー関連する質問のリンクを追加しました。 /q/10…。スコープチェーンについての議論があります。
非厳密モードでは、IIFE のこのポイントは window です
上記は正しくありません。 。 。