JS単スレッド非同期ioフィードバックの特性を分析する。


私たちが最初にjavascriptに接触したのは、ほとんどがhtmlの中のjs脚本からであるはずですが、このように見たところ簡単な言葉で何年も使っていますが、そのいくつかの原理機構もよく分かりませんでした。横になっている銃がありますか?
少なくともjavascriptはdomを操作する時、ボタン、リンクのクリック、マウスの経過、フォーカスなどの各種イベントを使った。
このプロセスでは、Oclick=「doCheck()」というように、dom要素にclickイベントを登録し、イベントコールバック関数doCheck()を結合した。
この元素をマウスでクリックすると、イベントが発生し、すぐにイベントバインディング関数を実行して戻ります。
またその後J queryに接触した時、大量の

$("#id").click(function(){
alert('    ');
});
このようなjqueryの文法は書くのがますます多くなりました。もう慣れたようですが、前のセレクタがフィルタリングdomノードを選んだだけです。続いてclickはイベント登録です。中のfunction(){}はパラメータです。イベントバインディング関数のパラメータはjavascriptの文法を熟知するように要求されます。
functionはjavascriptの中で一つの対象で、対象は世界の万物を指すことができます。だから対象は多くの属性、方法などを含みます。
対象である以上、一つのパラメータとして渡すことができます。この関数は高次関数といいます。
また、この関数には名前が定義されていません。名前を付けてもいいです。名前を送っても同じです。しかし、意味がありません。ここの関数オブジェクトは形参です。だから、私たちはこの関数に名前をつけないようにします。これはよく言う匿名関数です。
続いて上の$("菗id").clickでは、イベントをクリックしてトリガされると、イベントバインディング関数を実行します。上の直接domで与えられたonclick方法と同じ効果です。
もしブラウザの中に複数のスレッドがシナリオを操作しているとしたら、彼の乱れを想像できますか?スレッドは元素Aのvalue値を修正しようとしていますが、スレッド2が既にdomツリーからノードAを削除しています。スレッドが操作に失敗してエラーが発生しました。このような状況は最悪ではないです。ブラウザは複数のスレッドデータの整合性を維持していないか、またはフロントエンドのオペレーターが自分でメンテナンスしています。したがって、ブラウザは一つのスレッドだけでdomを操作します。このように多くの不要な面倒を省きました。

setTimeout(function(){
alert('  ');
},300);

while(true){
	........
}
300ミリ秒後にalert('ポップアップ')はまだ芝居があると思いますか?
ありませんでした。300ミリ秒待っています。ブラウザはシングルスレッドモードでスクリプトを実行します。
スレッドがデッドサイクルモードになったら、while文を実行します。あなたのsetTimeoutはもう何の役割もしません。
さらに、私たちはnode.jsの世界に入りました。javascriptのブラウザでの特性を完全に保持しています。シングルスレッドの非同期フィードバックもこの特徴のためです。もしnode.jsが同期言語であれば、たとえすべてのnpmパッケージがc++拡張されていても、更に速くても、c言語の処理速度より速いです。それではnode.jsは生まれていないかもしれません。もうphpに軽蔑されました。
その非同期がIOを振り向けば、彼の効率が向上します。以前の学校のファーストフード店と学校の食堂の対比を思い出させます。
食堂はすべての学生が皿を持って窓口に一字の列を作って、食事をする妹が一人ずつ盛って、一人ずつご飯を持って行きました。これは同期処理の結果です。
学校のファーストフードの店も学生が並んで注文しますが、注文したら呼び出し器を持って席を探すことができます。そうすると、職場の時間内に従業員は多くの人にサービスを提供します。そして、注文した学生は席を探して自分の他のことをします。馬鹿に窓口に立って食事を待つ必要はなく、あなたの食事が出てくる瞬間まで、サーバーは番号によってコードを押します。この時、テーブルの上の呼び出し器が鳴ります。食事を取りに行ったらいいです。これは非同期です。その呼び出し器が鳴ったらトリガ事件です。
マルチスレッド間の状態切り替えによる資源の浪費やメンテナンスの困難を減らすことができます。もちろん、マルチスレッドをサポートするための第三者パッケージもあります。
以上はJSシングルスレッドのフィードバックのすべての情報内容についてです。みなさんが勉強している時に他の質問があれば、下のメッセージエリアで検討してもいいです。