0

私は少し JavaScript を書こうとしていますが、この分野での経験はほとんどありません。

<head> 内の <script> ブロックは <body> 内のブロックの前に実行されることが保証されていることを示唆する投稿を読みましたが、まったく逆の動作が見られます。誰かが私にこれを見ている理由を説明してもらえますか?

ここに私の簡単なテストページがあります:

<html>
  <head>
    <script type="text/javascript">
    var test_msg;
    function initMap() {
      test_msg = "This is a test";
      window.alert('initMap: ' + test_msg);
    }
    </script>
  </head>
  <body onload="initMap()">
    <script type="text/javascript">
      window.alert('blargo: ' + test_msg);
    </script>
  </body>
</html>

これを (Firefox または IE で) ロードすると、#1: "blargo: undefined" と #2: "initMap: this is a test" という 2 つのメッセージ ボックスが表示され、後のスクリプトが最初に実行されていることが示唆されます。

助けてくれてありがとう、
gs。

4

3 に答える 3

5

最初のスクリプトが最初に実行されます...しかし、それは関数と変数を作成するだけです。

次に、ここで関数を呼び出しています。

<body onload="initMap()">

....これにより、すべてのドキュメント リソースが読み込まれるまで関数が呼び出されないことが保証されます。


したがって、コード実行の全体的な順序は次のとおりです。

   // first script
var test_msg;
function initMap() {
   test_msg = "This is a test";
   window.alert('initMap: ' + test_msg);
}


   // second script
window.alert('blargo: ' + test_msg);


   // function call via window.onload
initMap();
于 2013-03-08T19:06:07.800 に答える
0

本体がロードされたときに関数initMapが呼び出されますが(body onload='...')、最後のスクリプトがロードされて実行されたときにのみ本体が完全にロードされますJavaScript の読み込みと実行を混同しています。

于 2013-03-08T19:06:06.127 に答える