一部の専門家はすでに知っているかもしれませんが、これら 2 つのことにはまだ価値があると思うので、ここで共有します 次のコードがあります: コードをコピー コードは次のとおりです。 <br>function test() { with ( location) { <br>var temp = "URL" <br>} <br>test(); ><br> <br> この関数を呼び出すと何が出力されますか? 未定義のポップアップが表示されると思うかもしれませんが、実際には「URL」という文字列がポップアップ表示されます。これには、JavaScript の変数スコープの概念が含まれます。 <br>JS では、各スコープには対応する「変数オブジェクト」(このように呼ぶのは正確ではないかもしれませんが、そのようなものがあることだけ知っておいてください) があり、現在のスコープで定義された識別子が格納されます。 JS プログラムが起動すると、グローバル スコープに入ります。このプログラムでは、テスト関数がグローバル スコープで定義されているため、ここでの「変数オブジェクト」にはテスト関数の識別子が格納されます。次に、テスト関数を呼び出して、テスト関数のスコープに入ります。テスト関数のスコープ自体も独自の「変数オブジェクト」を持ちます。テストのスコープに入ると、グローバル スコープに格納されているスコープも設定されます。識別子がコピーされるため、グローバル スコープで定義された識別子にテスト関数でアクセスできますが、内部の内容は外部スコープでは見ることができません。この場合、temp は内部スコープで定義されているため、ここでのalert(temp) は未定義を出力します。しかし、なぜここで内部スコープで定義された識別子を見つけることができるのでしょうか? <br> with ステートメント ブロック内のスコープの「変数オブジェクト」は読み取り専用であるため、現在のレイヤーで定義された識別子はこのレイヤーに格納できませんが、その上位レベルのスコープ、つまりこれにより、alert(temp) ステートメントは内部で定義された temp 変数にアクセスできるようになります。同じ状況が try catch ステートメントでも発生します。 <br>。JavaScript にはステートメント ブロックの概念がありません。コードは次のとおりです。</div> <br><br><br><br>コードをコピーします。<br><div class="codetitle"> <span> コードは次のとおりです。 <a style="CURSOR: pointer" data="59439" class="copybut" id="copybut59439" onclick="doCopy('code59439')"><u> </u>if (true) { </a>var temp = "oh"; </span>} </div>alert(temp); <div class="codebody" id="code59439"> <br> <br> 非常に単純な行プログラミング言語の経験に基づくと、アラート ステートメントはエラーを報告すると考えられますが、そうではありません。通常、アラート ステートメントは文字列「oh」を出力するため、概念はありません。 <br>JavaScript のステートメント ブロックの。 <br> 上記の 2 つの例は、あまり専門的ではないかもしれませんが、これらの 2 つの言語機能を理解した後でも、十分に役立つはずです。 JS ではエラーが発生する可能性が低いため、皆さんと JS を書く際に役立つことを願って投稿しています。</div>