呼び出しスタック、イベントループ

7554 ワード

コールスタック


(呼び出し関数、スタックデータ構造)

function first() {
 second();
 console.log("첫번째");
}
function second() {
 third();
 console.log("두번째");
}
function third() {
 console.log("세번째");
}
結果はね.
3番目2番目1番目
  • Anonyomusは仮想的なグローバルコンテキスト(常に存在することが望ましい)
  • である.
  • 関数は呼び出し順に積み重ねられ、
  • を逆順に実行する.
    function run() {
      console.log('3초 후 실행');
    }
    console.log('시작');
    setTimeout(run, 3000);
    console.log('끝');
    結果はね.
    開始後3秒で実行
  • settimeoutは非同期です
  • コールスタックのみでは
  • は説明できません.
  • コールスタック+イベントループ
  • イベントループ



    settimeoutは呼び出しスタックを終了し、バックグラウンドに戻ります.
    コードはバックグラウンドで同時に実行できます.
    コードは最後まで読み、呼び出しスタックは空ですが、バックグラウンドはいっぱいです.
    バックグラウンドでは、実行は3秒後にタスクキューに送信されます.

    呼び出しスタックが空の場合、イベントループのロールはタスクキューから関数をドラッグして実行されます.
    run関数のconsole.ログも呼び出しスタックに配置されます.

    コンソールが3秒後に出力が実行され、run関数が終了すると、呼び出しスタックもrun関数をダウングレードします.

    *ノードからバックグラウンドに送信できる関数を制限します.
    ex)settimeout、setInterval、ネットワークリクエスト、ハードディスクファイルの読み取りコマンド、暗号化コマンドなど
    function oneMore() { 
      console.log('one more');
      }
    function run() {
        console.log('run run');
        setTimeout(()=>{
            console.log('wow');
        },0);
    new Promise((resolve)=>{
            resolve('hi');
        })
        .then(console.log);
        oneMore();
    }
    setTimeout(run, 5000);
    結果.
    run run
    one more
    hi
    wow
    バックグラウンドでは、まず何が実行されているのか分からないかもしれません.
    先に終了してからタスクキューに送信します.
    Promiseはまず呼び出しスタックに入ります.
    *Promise、then/catch、process、nexttickなどがタスクキューに入ると割り込みます!