JavaScriptの動作原理


いったいどこがJavaScriptエンジンの分野なのか、どこがブラウザの分野なのか、基礎が一番難しい!

📌 JavaScriptアクション構造


まずjavascriptを機能させるにはjavascriptエンジンが必要です.JAvascriptエンジンにはv 8、spiderMonkeyなどがたくさんありますが、最も代表的なのはグーグルが作成したv 8エンジンです.

v 8エンジン



エンジンは、メモリ割り当てを生成するメモリスタックと、コードに基づいてスタックを実行する呼び出しスタックから構成されます.
JavaScriptを使用する場合、settimeout()などのAPIがよく使用されます.これらのAPIはJavaScriptエンジンが提供する要素ですか?✕
これらのAPIは、WebブラウザやノードjsのようなJavaScriptの実行時に提供されるWeb APIと呼ばれる.したがって、ブラウザごとにサポートされるかどうかは異なります!
(javascript実行時:javascript駆動環境、Webブラウザ、node jsなどすべてのコンテンツが含まれているようです.)
前述したようにjavascriptは、上述したsettimeoutのような非同期コードを記述することができるが、処理の概念はない.
どうやって処理しますか?Event LoopとCallBack Queueの組み合わせ!
Webブラウザまたはランタイムは、Web APIおよびイベントループおよびCallBack Queueをサポートします.

最終的にはこのような動作構造が誕生する.
今はまだよく理解できないので、もっと詳しい例を挙げて理解したいと思います.

📌 JavaScriptはOOスレッドですか?


Call StackはJavaScriptを1つずつ読み込み、コードが順番に実行されることを確認します.stackを使用しているので、後入先出方式で行います.
stackの長方形をstack frameと呼び、関数が実行されるとpointerがstackの上部を指し、関数の実行が終了すると、そのstack frameから削除されます.
スタックを超えたら?
function foo(){
	foo();
}
foo();
以上のように、無限ループを生成するコードを実行すると、maximal call stack sizeエラーが発生します.=stack Overflow
このようにjavascriptはcallスタックを持ち、コードを順番に処理するため、一度に1つのコマンドしか実行できません.
答:一度に多くのことができず、1つしか処理できないため、JavaScriptは単一スレッド同期言語です.
JAvascriptはこれらの特性を持つため,無限ループが発生してもデッドロックは発生しない.
ああ、情報処理技術を学んだ文章を思い出して、しばらく覚えておきますが、行き詰まりの発生条件は?
1.反発-1つのリソースで1回に1つのプロセスしか使用できません
2.占有と待機
3.非線形点
4.環状大気

📌 では、JavaScriptはどのように非同期操作を実行しますか?


すべてのタスクをcallスタックのみで実行する場合は、多くの機能を提供するサイトに時間がかかる場合があります.プレイヤーにとっては、1秒遅れるだけで集中力が低下し、信頼感も低下し、
このとき,前述したEvent LoopとCallBack Queueが解決策となる.
function foo1() {
  console.log("1");
}

function foo2() {
  console.log("2");
}

foo1();
setTimeout(() => {
  console.log("3");
}, 2000);
foo2();
このコードはどのように実行されますか?1,3,2 ? ❌ 1,2,3 ? ⭕️
一行を書きたいのですが、代わりにビデオレッスンをします.説明は簡単すぎますが、JavaScriptエンジンのコンポーネントとWebブラウザまたはJavaScript実行時のコンポーネントを知っていれば、より明確に区別できます.
https://www.youtube.com/watch?v=v67LloZ1ieI
💡 Event Loopはコールバックキューのコールバック関数をcallスタックに送信し、callスタックが空であるかどうかを確認します.

では、なぜcall stackは空にしなければならないのでしょうか。


なぜEvent LoopはCall Stackを空にしてCalback Queueの関数を処理する必要があるのですか?次の写真はv 8エンジンを開発した開発者の回答です.まじめに説明しなければならない.

CallStackのスクリプトの現在の状態(?)「星間迷航」の「星間迷航」を追跡するための言葉だ.
通常の関数がうまく機能していると仮定し、event Loopはcallback queueのsettimeout関数をcallstackにプッシュします.そうであれば、現在進行中の関数を停止し、イベントループ送信の関数を実行する必要があります.しかしこのときevent loopがまた関数を送信すると...?
callstackが空の場合にのみプッシュするのは、javascriptがマルチスレッドで発生する可能性のある(臨界領域を解決するための)同期問題を回避し、単一スレッド言語であることを保証するためである.