ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の pre-parsing_javascript スキルを理解する

JavaScript の pre-parsing_javascript スキルを理解する

WBOY
WBOYオリジナル
2016-05-16 18:43:261064ブラウズ

実際、あるいは何らかの現象によって、これが当てはまらないことが証明されています。「JavaScript 決定版ガイド」および関連するオンライン情報を通じて、JavaScript には「事前解析」動作があることがわかりました。この機能を理解することが重要です。理解していないと、実際の開発中に解決できない多くの問題が発生し、プログラムのバグにつながる可能性があります。この現象を分析するために、また私自身の学習の要約として、この記事は JavaScript の「事前解析」を徐々に理解できるようにします。私の意見が間違っている場合は、修正してください。
(1) JavaScript が実行時に上から下にのみ解析される場合、最初に関数を定義してからそれを呼び出すため、次のコードが正しく実行できることは理解できます。

コードをコピー コードは次のとおりです。

function showMsg()
{
alert ('This is message');
}
showMsg(); // これはメッセージです

(2) を呼び出した後に関数を定義できることもわかります。次のコードと同様に、正常に動作します。 showMsg() が呼び出されたときに showMsg() がまだ定義されていないように見えますが、正常に動作します。これは、JavaScript が「事前解析」されていることを示しています。
コードをコピー コードは次のとおりです。

showMsg(); // これはメッセージです。
function showMsg()
{
alert('This is message');
}

(3) 上記は関数の例です。は、通常の変数の別の例です。次の例を実行すると、最初の文の msg が定義されているが初期化されていないことを示す unknown がポップアップ表示されます。これは var msg; と同じです。以下の 2 番目の文をコメントアウトすると、「メッセージが定義されていません」というエラーが報告されます。これは、JavaScript が「事前解析」されていることも示しています。
コードをコピーします コードは次のとおりです。 🎜>var msg='This is message';

(4) JavaScript の「事前解析」についての印象を深めるために、別の例を見てみましょう。次のコードでは、ダイアログ ボックスが 2 回表示され、「これはメッセージ 2 です。これはなぜですか?」と表示されていることがわかります。実際、以下では同じ名前の 2 つの関数が続けて定義されており、後の showMsg() は以前に定義された関数を上書きします (JavaScript では、同じ名前の変数にも上書きの問題が発生します)。つまり、最初の showMsg() が定義されます。廃棄されます。 showMsg() の 2 回目の呼び出しで、上で定義したメッセージ 1 関数が呼び出されないのはなぜですか?これは、JavaScript に「準備」動作があることを再度証明しています。



コードをコピー
コードは次のとおりです。 showMsg(); // これはメッセージです。 2 function showMsg()
{
alert('これはメッセージ 1');
}
showMsg() // これはメッセージ 2
function showMsg(); 🎜>{
alert('This is message 2');
}


(5) JavaScript の「事前解析」とは、変数または関数を環境に事前に解析することです。それらは呼び出すことができます (変数実行環境)。次のコードは、alert(msg) の前に msg の定義を確認したように見えますが、プログラムは依然として「msg が定義されていません」というエラーを報告します。これは、関数内で定義された変数が関数のプライベート変数であり、呼び出すことができないためです。これは、JavaScript の「事前解析」が、定義されたすべての変数をウィンドウなどのグローバル オブジェクトに解析することを意味しないことを示しています。



コードをコピー
コードは次のとおりです。 function showMsg() { var msg='This is message';
}
alert(msg); // msg は未定義です


(6) JavaScript の「事前解析」はセクションで実行されます。正確には、<script> ブロックに分かれています。次のコードは同じページの 2 つのスクリプト ブロックにあり、同じ名前の 3 つの関数を定義しています。プログラムの実行結果は、2 番目のスクリプト ブロックの showMsg() が最初の 2 つの showMsg() をカバーしていないのに対し、最初のスクリプト ブロックの 2 番目の showMsg() が最初の showMsg() をカバーしていることを示しています。 <BR><BR><BR></script>

コードをコピー
コードは次のとおりです。 script type= "text/javascript"> showMsg(); //これはメッセージ 2 function showMsg()
{
alert('これはメッセージ 1'); }
function showMsg()
{
alert('これはメッセージ 2')
}
script type="text/javascript" >
function showMsg()
{
alert('これはメッセージ 3')

🎜>
著者: WebFlash
出典: http://webflash.cnblogs.com
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。