初心者の方はJavaScriptの実行環境やスコープチェーンについてよく理解していない方も多いと思いますので、私の理解に基づいてお伝えします。
一般に、実行環境はグローバル実行環境とローカル実行環境に分けられます。ローカル実行環境は関数実行環境とも呼ばれます。では、実行環境とは一体何でしょうか?平たく言えば、実行環境とはコードが実行される環境です。次のコードを見て、さらに分析してみましょう。
<script><br>var name="zhuzhenwei"; function changeName(){ if (name=="zhuzhenwei"){ name="heting"; }else{ name="zhuzhenwei"; } } changeName(); console.log(name); //heting<br></script>
上記のコードに示されているように、最初のステートメントが実行されるとき、ステートメントが配置されている環境はグローバル実行環境であることに注意してください。各実行環境には変数オブジェクトが関連付けられています。グローバル実行環境の場合、それに関連付けられたオブジェクトはウィンドウ オブジェクトです。その直後に、次のステートメントで関数が宣言されています (注: これは単なる関数宣言であり、呼び出されるまで内部コードは実行されません)。 この機能はグローバル実行環境にもあります。最後に、changeName() 関数を呼び出しました。この関数が呼び出されると、すぐに、changeName() 関数の実行環境 (つまり、関数の実行環境) にジャンプし、実行環境に入ると、関数の作成が開始されます。関数内の対応する変数 (関数内に var が出現すると仮定するなど) a=12; このようなコード)、関数を呼び出さないと作成されず、それに関連する変数オブジェクトはアクティブ オブジェクトとみなされます (アクティブ オブジェクトには最初は 1 つの変数、つまり引数オブジェクトのみが含まれます)。 , 上から以下のステートメントを実行します。同時に、コードが関数環境で実行されると、変数オブジェクトのスコープ チェーンが作成されます。このスコープ チェーンには、changeName() の変数オブジェクトとグローバル変数オブジェクトが含まれます。
スコープ チェーンは、実際にはフロント エンドからエンドまでアクセスできるスコープです。つまり、実行環境にアクセスできるすべての変数と関数への秩序あるアクセスを保証します。フロント エンドは変数オブジェクトを参照します。現在実行中のコードは です。ここに、changeName() 関数の変数オブジェクトがあり、最後がグローバル変数オブジェクトです。たとえば、関数を実行するときに、識別子を検索する必要があります。スコープ チェーンの最後に見つからない場合は、ウィンドウ オブジェクトに到達するまで上方向に検索を続けます。グローバル環境のスコープ チェーンについては触れませんでしたが、実際にはグローバル環境にもスコープ チェーンが存在しますが、グローバル変数オブジェクトは 1 つだけです。 明らかです。スコープ チェーンを検索する必要がないため、ローカル変数にアクセスする方がグローバル変数にアクセスするよりも高速です。明らかに、スコープ チェーンは、コードが配置されている実行環境に応じて動的に変化します。
changeName()関数の実行後、つまり関数実行環境でのコードの実行完了後、環境内のローカル変数とローカルオブジェクトは直ちに破棄されます(変数がvarで宣言されていない場合) 、グローバル変数であり、ローカル環境のコードが実行された後も Destroy されないことを示します)、その後、実行環境が関数実行環境からグローバル実行環境に変更され、console.log(name) の実行が継続されます。 ); 声明。しかし、Webページやブラウザを閉じてしまえば、地球環境も破壊されてしまいます。
要約は次のとおりです:
実行環境もスコープとなり、実行環境が変数のライフサイクルを決定します。
実行環境はグローバル実行環境とローカル実行環境に分かれており、実行環境に入るたびに変数や関数を検索するためのスコープチェーンが作成され、このスコープチェーンが動的に変化すると考えられます。
関数のローカル環境は関数スコープ内の変数にアクセスできるだけでなく、それを含む環境 (親環境) やグローバル環境にもアクセスできますが、グローバル環境は関数スコープで定義された変数と関数にのみアクセスできます。グローバル環境 (var を使用して宣言されていない環境内のローカル変数もグローバル変数です) であり、ローカル環境のデータにアクセスできません (グローバル変数はアクセスできるため、すべてのデータとは言えません)。注: 関数内のパラメータは、関数のローカル変数です。
以上がJavaScriptの実行環境(スコープ)とスコープチェーンの全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご不明な点がございましたら、メッセージを残してください。コミュニケーションをとるために、さらに詳しく知りたい場合は、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。