この記事では、JavaScript の動作原理について詳しく説明します。必要な方は参考にしていただければ幸いです。
JavaScript の動作原理
JavaScript の動作原理とその理由を理解するここでは主に JavaScript の動作原理の理解について説明します。
JAVA 仮想マシン
まず、JAVA 仮想マシンから始めましょう。
まず、なぜ仮想マシンを作成する必要があるのかについて説明します。仮想マシンがないと、マシンごとにコードをコンパイルする必要があり、明らかに不合理です。したがって、この問題を解決するために、Java は仮想マシン (VM) の概念を導入し、最終的なターゲット プラットフォームが何であっても、コンパイルされたコードを仮想マシン上で直接実行できるようにし、その上に仮想一貫性のあるプラットフォームを構築します。仮想マシンが登場すると、一度コンパイルすればどこでも実行できるという効果を得ることができます。
基本的に、Java と C# はネイティブ言語ではありません。コンパイルされた結果は機械語ではなく、独自の命令形式であり、それ自体では実行できず、それを解釈して実行するには特別なプログラムが必要です。このプログラムはいわゆる「仮想マシン」です。
逆に、C、C、Go、Rust などの言語はネイティブ言語であり、コンパイルされた結果はそれ自体で直接実行できます。「仮想マシン」という概念はありません。 。
JavaScript エンジン
JavaScript エンジンによって実行される作業は、JAVA 仮想マシンと非常によく似ています
その機能
JS エンジンは主に JS コードの字句解析、文法解析などを実行し、コンパイラを介してコードを実行可能なマシン コードにコンパイルしてコンピュータで実行します。
簡単に言うと、その唯一の目的は JavaScript コードを読み取ってコンパイルすることです。つまり、JavaScript コードを分析、解釈、最適化、ガベージ コレクションすることができます。
実行プロセス
JavaScript エンジンはソース コードをロードし、それを文字列に分解し (単語セグメンテーションとも呼ばれます)、これらの文字列をコンパイラが認識できるものに変換します。バイトコードを理解して、それらのバイトコードを実行できます。
Google の V8 エンジンは C で書かれています。JavaScript ソース コードをコンパイルして実行し、メモリ割り当てとガベージ コレクションを処理することもできます。これは、ソース コードをマシン コードに直接コンパイルできる 2 つのコンパイラーで構成されるように設計されており、具体的な実行プロセスは次のステップのようになります。
字句解析を実行します。 , ソースコードは、明確な意味を持つ一連の記号または文字列に分割されます。
次に、構文アナライザーを使用してこれらのシンボルを分析し、構文ツリーに構築します。
その後、4 つの JIT (Just-In-Time) プロセスが参加し始め、パーサーによって生成されたバイトコードの分析と実行が行われます。
ECMAScript との関係
正確に言うと、各 JavaScript エンジンは ECMAScript のバージョンを実装しており、JavaScript はそのブランチです。 ECMAScript が進化し続けるにつれて、JavaScript エンジンも改良され続けています。これほど多くの異なるエンジンがある理由は、それぞれが異なる Web ブラウザー、ヘッドレス ブラウザー、または Node.js などのランタイム環境で実行されるように設計されているためです。
JavaScript エンジンはプログラムであり、私たちが記述する JavaScript コードもプログラムです。プログラムを理解させるにはどうすればよいでしょうか。これにはルールを定義する必要があります。例:
var a = 1 + 1
左側の var は変数 a を宣言する宣言を表します
右側の var は 1 と 1 の加算を表します
中央の等号はこれが代入ステートメントの最後のセミコロン
はステートメントの終わりを示します
これらのルールにより、JavaScript エンジンはこの標準に従って JavaScript コードを解析できます。 。次に、ここの ECMAScript でこれらのルールを定義します。その中で、文書 ECMAScript 62 は、JavaScript 言語の完全な標準セットを定義しています。これらには以下が含まれます:
var、if、else、break、 continue などは JavaScript のキーワードです
abstract、int、long などは JavaScript の予約語です
数値としてカウントする方法と文字列としてカウントする方法など。
演算子 ( 、 - 、>、< など) を定義します。
JavaScript 構文を定義します。
式、ステートメントなどの標準処理アルゴリズムを定義します。 == が発生した場合の対処方法
標準の JavaScript エンジンは、この一連のドキュメントに従って実装されます。IE の JS エンジンなど、標準に従わない実装もあるため、ここでは標準を強調します。これが、JavaScript に互換性の問題がある理由です。 IE の JS エンジンが標準に従って実装されていない理由については、ブラウザ戦争に関するものなので、ここでは詳しく説明しません。
つまり、簡単に言うと、ECMAScript が言語の標準を定義し、JavaScript エンジンがそれに従って実装する、これが 2 つの関係です。
ランタイム
ランタイムは、単純に現在の実行環境として理解できます。Web ブラウザーのウィンドウ オブジェクトや DOM 関連 API など、環境によって異なる API 呼び出しが提供されます。など、これらのインターフェイスは関連する JS 呼び出しを提供できます
以上がJavaScript の仕組みの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。