質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

256閲覧

ブラウザがJavaScriptファイルを解析する仕組みが分からない

miiikun

総合スコア39

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/07/25 15:08

編集2017/07/25 15:08

サーバーから、htmlファイルが送られてきました。
その中のscriptに、jsファイルへの参照があります。
だから、ブラウザはこれをhtml読み込み時に解析するみたいです。
この送られてきた直後のブラウザによるjsファイルの解析は何をしているのでしょうか?
例えば

<script> let a = 5; let b ; function plus(){ return a + b } alert('質問'); </script>

というコードがあったときに、ブラウザはこれを解析時にコンパイル?インタプリント?してメモリに展開するのでしょうか。どのようにして、jsファイルの内容をメモリに展開するのか分かりません。

また、上のコードに限らず、jsファイルの変数が初期化されるタイミングは、ブラウザがその変数を読み込んだその時なのでしょうか?他にもjsファイルの中にインスタンス化できるオブジェクトがあったときに、そのオブジェクトの中のプロパティではなく変数は、そのオブジェクトがインスタンス化されるときに初期化されるのか、またはそのjsファイルが読み込まれたときに初期化されるのか疑問です。

全体的に
ブラウザがJavaScriptをメモリに展開するまでの過程と、
変数の初期化タイミングがいつなのかが分かっていません。

JavaScriptを出来る人からのご回答をお待ちしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

script要素

  • defer, async属性のないscript要素は同期的にパースされ、即実行されます。実行が完了するまで後続のHTML文字列のパース処理を待機させます。
  • defer属性のあるscript要素は並列処理でパースされ、DOMツリー構築が完了するまでコードの実行を待機させます。そのコードは DOMContentLoaded よりも先に発動します。
  • async属性のあるscript要素は非同期にパースされ、即実行されます。非同期処理の為、後続のHTML文字列のパース処理を停止しません。

script要素の詳細は HTML Standard 仕様を参考にしてください。

HTMLパーサ

HTMLパーサの詳細も HTML Standard を参照して下さい。

Re: miiikun さん

投稿2017/07/25 16:27

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問