JavaScript はインタープリタ型言語であり、その実行はトップダウンであることはわかっていますが、トップダウンについての理解はブラウザごとに若干異なり、コードの上流と下流、つまりプログラム フローが重要です。プログラムの正確性が重要なので、複数のjsブロックの実行順序を深く理解する必要があると思います。
まず第一に、ページに JavaScript を追加するメソッドがいくつあるかを知る必要があります。以下の最初の 2 つのタイプが一般的ですが、実際にはさらに多くのタイプがあります。
1. 外部 js ファイルをページに直接導入します:
2. js フラグメントをページに直接書き込みます
"); " "ipt>注: 現時点では、「..
」を「
alert(1)
");
これはすでにスクリプト内にあるので、なぜ追加する必要があると思うかもしれません。別の層ですか?あはは、これは書き方の 1 つであり、独自の特別な動作がありますが、これについては後で説明します。
5. Ajax で xmlHttpRequest を eval() と組み合わせて使用し、js を導入します。私はこれを Dojo コードで詳しく説明しました。
var ajaxRequest = getXmlHttpRequest()//各ブラウザーの必要性を保存します。 get xmlHttpRequest 部門
ajaxRequest.open("GET","my.js",false);//xmlHttpRequest オブジェクトの Get メソッドを使用した同期呼び出し
ajaxRequest.send(null); ajax.responseText ;//文字列を js フラグメントとして取得します
eval(sJsFragment);//js フラグメントを実行します
注: my.js 以降の sJsFragment のコンテンツは非常に標準化された js である必要があります// コメントで始まってはいけません。js が標準化されているかどうかを確認するにはどうすればよいですか? http://jslint.com/ にアクセスします。
6. これを初めて見たのは、Yahoo のフロントエンド コードです。
var oScript = document. "script");//スクリプト要素を作成します
oScript.src = "my.js";//src属性を指定します
document.getElementsByTagName("head")[0].appendChild(oScript) ;
注: my.js のコンテンツは、oScript がドキュメントに追加された後に取得され、実行されます。この段落を注意深く見ると、この呼び出しは非同期であり、ドキュメントが読み込まれた後にイベントによってトリガーできることが簡単にわかります。これを使用して、ドメイン間でデータをフェッチするときに xmlHttpRequest の Get メソッドの代わりにこの呼び出しを変更しました。 、結果的には完璧な結果を達成しました。今後、特別な記事を書く機会を得るでしょう。
6 つのタイプにはかなりの数があり、さらに多くのタイプがある可能性があります。さらに、これらのタイプは互いに入れ子になっていて、常に変化する可能性があります。
メソッド 1、2、4、および 6 で導入された JavaScript の実行順序は非常に自然であり、ページがロードされて後続のイベントがトリガーされると、それらは先着順に従い、内部的には最上位になります。下。 私たちの主な懸念は、js を導入する 3 番目と 4 番目の方法によって引き起こされる問題です (再投稿する場合は出典を明記してください: http://blog.csdn.net/lenel)