呼び出しスタック、イベントループ
7554 ワード
コールスタック
(呼び出し関数、スタックデータ構造)
function first() {
second();
console.log("첫번째");
}
function second() {
third();
console.log("두번째");
}
function third() {
console.log("세번째");
}
結果はね.3番目2番目1番目
function run() {
console.log('3초 후 실행');
}
console.log('시작');
setTimeout(run, 3000);
console.log('끝');
結果はね.開始後3秒で実行
イベントループ
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などがタスクキューに入ると割り込みます!
Reference
この問題について(呼び出しスタック、イベントループ), 我々は、より多くの情報をここで見つけました https://velog.io/@annie1004619/호출-스택-이벤트-루프テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol