1. JavaScript 関数のスコープ チェーンは、定義時スコープ チェーンと実行時スコープ チェーンに分割されます。
2. 関数が定義されるとき、その定義スコープ チェーン [[scope]] は次の規則に従います。 関数の定義スコープ チェーン [ [スコープ]] は常に、それが配置されている外部関数の実行スコープ チェーンです。3. グローバル関数の定義スコープ チェーンには、ウィンドウの属性のみが含まれます。
4. 関数の実行スコープ チェーンは、常に、定義スコープ チェーンの先頭にある現在のアクティブ オブジェクト (これ、引数、パラメーター、およびローカル変数を含みます) にプッシュされます。5. 関数の実行時、変数のアドレス指定は常にスコープ チェーンの先頭から下方向に検索されるため、グローバル変数のアドレス指定速度は最も遅くなります。
6. 内部関数が実行されるときも、そのスコープ チェーン全体にアクセスできます。これが、クロージャが実行時に完成した外部関数によって定義された変数にアクセスできる理由です。7. 関数の実行中に with ステートメントが検出されると、with で指定されたオブジェクトのすべての属性がスコープ チェーンの先頭として一時的にプッシュされます。
8. 関数の実行で catch が発生すると、catch で指定されたエラー オブジェクトがスコープ チェーンの先頭に一時的にプッシュされます。
理解を深めるために例を示してスコープ チェーンを描いてみましょう:
そのようなコードがあります:
コードをコピー
コードは次のとおりです: