SlideShare a Scribd company logo
München Aachen Bamberg Berlin Boswil Đà Nẵng Dresden Grenoble Hamburg Köln Leipzig Nürnberg Prag Stuttgart Washington Zug
The Mystery of Event Loop in JavaScript
Trình Đức Trần
Đà Nẵng, 04/01/2020
04.01.20 2
Trình Đức Trần
@tranductrinh
04.01.20 3
04.01.20 4
04.01.20 5
Functional
Object-oriented
Single-threaded
Non-blocking
Asynchronous
04.01.20 6
04.01.20 7
console.log('Zero');
setTimeout(() => console.log('One'), 0);
Promise.resolve().then(() => console.log('Two'));
console.log('Three');
04.01.20 8
Demo
04.01.20 9
console.log('Zero');
setTimeout(() => console.log('One'), 0);
Promise.resolve().then(() => console.log('Two'));
console.log('Three');
04.01.20 10
v8 SpiderMonkey JavaScriptCore
04.01.20 11
JavaScript Engine
04.01.20 12
JavaScript Engine
Call stack
04.01.20 13
JavaScript Engine
Call stack Heap
04.01.20 14
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
04.01.20 15
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
Call stack
04.01.20 16
Call stack
Global execution
context
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
04.01.20 17
Call stack
Global execution
context
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
04.01.20 18
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
Call stack
Global execution
context
Function execution
context
(sum)
04.01.20 19
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
Call stack
Global execution
context
Function execution
context
(sum)
Function execution
context
(minus)
04.01.20 20
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
Call stack
Global execution
context
Function execution
context
(sum)
04.01.20 21
Call stack
Global execution
context
const minus = function(num1, num2) {
return num1 - num2;
}
const sum = function(num1, num2) {
minus(num1, num2);
return num1 + num2;
}
sum(0, 1);
04.01.20 22
Demo
04.01.20 23
JavaScript Engine
Call stack Heap
04.01.20 24
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
04.01.20 25
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
Web APIs
DOM
XMLHttpRequest
setTimeout
04.01.20 26
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
Callback queue
Web APIs
DOM
XMLHttpRequest
setTimeout
04.01.20 27
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
Job queue
Web APIs
DOM
XMLHttpRequest
setTimeout
Callback queue
04.01.20 28
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
Event loop
Job queue
Web APIs
DOM
XMLHttpRequest
setTimeout
Callback queue
04.01.20 29
console.log('Zero');
setTimeout(() => console.log('One'), 0);
Promise.resolve().then(() => console.log('Two'));
console.log('Three');
04.01.20 30
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Event Loop
Callback queueJob queue
04.01.20 31
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
console.log('Zero');
Callback queueJob queue
Event Loop
04.01.20 32
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Zero
setTimeout(
() => console.log('One’)
, 0
);
Callback queueJob queue
Event Loop
04.01.20 33
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
Event Loop
Promise.resolve().then(
() => console.log('Two’)
);
setTimeout
04.01.20 34
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
() =>
console.log(‘One');
() =>
console.log(‘Two');
console.log('Three');
Event Loop
04.01.20 35
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
() =>
console.log(‘One');
() =>
console.log(‘Two');
Three
Event Loop
04.01.20 36
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
() =>
console.log(‘One');
Three
console.log(‘Two');
Event Loop
04.01.20 37
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
() =>
console.log(‘One');
Three
Two
Event Loop
04.01.20 38
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue
console.log(‘One');
Zero
Three
Two
Event Loop
04.01.20 39
JavaScript Runtime
JavaScript Engine
Call stack
Web APIs
Callback queue
console.log('Zero');
setTimeout(
() => console.log('One'),
0
);
Promise.resolve().then(
() => console.log('Two')
);
console.log('Three');
Job queue Zero
Three
Two
One
Event Loop
04.01.20 40
JavaScript Engine
Call stack Heap
JavaScript Runtime
JavaScript Engine
Call
stack
Heap
Event loop
Job queue
Web APIs
DOM
XMLHttpRequest
setTimeout
Callback queue
04.01.20 41
Q&A
04.01.20 42
My upcoming TechTalk
ES6 to ESNext: An in-depth look
In March 2020
04.01.20 43
Innovation Implemented.
mgm technology partners GmbH
Frankfurter Ring 105a
80807 München
Tel.: +49 (89) 35 86 80-0
Fax: +49 (89) 35 86 80-288
www.mgm-tp.com
PragMünchen Berlin Hamburg Köln NürnbergGrenoble LeipzigDresdenBamberg ZugĐà NẵngAachen WashingtonStuttgart

More Related Content

PDF
Openstack taskflow 簡介
PDF
The Ring programming language version 1.5.3 book - Part 89 of 184
PDF
Cassandra is great but how do I test my application?
PPTX
Binary Studio Academy: Concurrency in C# 5.0
PDF
Time-driven applications
PDF
Clean code via dependency injection + guice
PPTX
Avoiding Callback Hell with Async.js
PDF
DataStax: Making Cassandra Fail (for effective testing)
Openstack taskflow 簡介
The Ring programming language version 1.5.3 book - Part 89 of 184
Cassandra is great but how do I test my application?
Binary Studio Academy: Concurrency in C# 5.0
Time-driven applications
Clean code via dependency injection + guice
Avoiding Callback Hell with Async.js
DataStax: Making Cassandra Fail (for effective testing)

What's hot (20)

PPTX
ES6, 잘 쓰고 계시죠?
PDF
Callbacks and control flow in Node js
DOCX
Laporan tugas network programming
PDF
Scalable Angular 2 Application Architecture
PDF
Pre New Year Check of PostgreSQL
PDF
DESTRUCTOR EXAMPLES
PDF
Rxjs vienna
PDF
用 Go 語言打造多台機器 Scale 架構
PDF
Job Queue in Golang
PPTX
JavaScript Engines and Event Loop
PDF
What is new with JavaScript in Gnome: The 2021 edition
PDF
非同期javascriptの過去と未来
PDF
Fault tolerant microservices - LJC Skills Matter 4thNov2014
PDF
Asynchronní programování
PDF
LJC Conference 2014 Cassandra for Java Developers
PDF
Asynchronous programming done right - Node.js
PDF
Callbacks, promises, generators - asynchronous javascript
PDF
The Ring programming language version 1.10 book - Part 10 of 212
PDF
Hybrid quantum classical neural networks with pytorch and qiskit
PDF
Trisha gee concurrentprogrammingusingthedisruptor
ES6, 잘 쓰고 계시죠?
Callbacks and control flow in Node js
Laporan tugas network programming
Scalable Angular 2 Application Architecture
Pre New Year Check of PostgreSQL
DESTRUCTOR EXAMPLES
Rxjs vienna
用 Go 語言打造多台機器 Scale 架構
Job Queue in Golang
JavaScript Engines and Event Loop
What is new with JavaScript in Gnome: The 2021 edition
非同期javascriptの過去と未来
Fault tolerant microservices - LJC Skills Matter 4thNov2014
Asynchronní programování
LJC Conference 2014 Cassandra for Java Developers
Asynchronous programming done right - Node.js
Callbacks, promises, generators - asynchronous javascript
The Ring programming language version 1.10 book - Part 10 of 212
Hybrid quantum classical neural networks with pytorch and qiskit
Trisha gee concurrentprogrammingusingthedisruptor
Ad

Similar to The Mystery of Event Loop in JavaScript (20)

PDF
JS Fest 2019 Node.js Antipatterns
PPTX
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
PPTX
JavaScript Multithread or Single Thread.pptx
PDF
Node js
PDF
Javascript internals
PPTX
Call stack, event loop and async programming
PPTX
Events for JavaScript event loop track.pptx
PDF
The evolution of asynchronous javascript
PPTX
All you need to know about the JavaScript event loop
PPTX
[DevDay2018] How does JavaScript actually work? - By: Vi Nguyen, Senior Softw...
PDF
Frontend Track NodeJS
PDF
Event driven javascript
PDF
Event driven javascript
PDF
Douglas Crockford: Serversideness
PDF
Asynchronous programming with java script and node.js
PDF
Think Async: Asynchronous Patterns in NodeJS
PDF
Node js internal
PDF
Async JavaScript in ES7
PDF
JavaScript Async for Effortless UX
PDF
The evolution of java script asynchronous calls
JS Fest 2019 Node.js Antipatterns
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
JavaScript Multithread or Single Thread.pptx
Node js
Javascript internals
Call stack, event loop and async programming
Events for JavaScript event loop track.pptx
The evolution of asynchronous javascript
All you need to know about the JavaScript event loop
[DevDay2018] How does JavaScript actually work? - By: Vi Nguyen, Senior Softw...
Frontend Track NodeJS
Event driven javascript
Event driven javascript
Douglas Crockford: Serversideness
Asynchronous programming with java script and node.js
Think Async: Asynchronous Patterns in NodeJS
Node js internal
Async JavaScript in ES7
JavaScript Async for Effortless UX
The evolution of java script asynchronous calls
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Big Data Technologies - Introduction.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Approach and Philosophy of On baking technology
PPTX
MYSQL Presentation for SQL database connectivity
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
Teaching material agriculture food technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
A Presentation on Artificial Intelligence
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Building Integrated photovoltaic BIPV_UPV.pdf
cuic standard and advanced reporting.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Digital-Transformation-Roadmap-for-Companies.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
20250228 LYD VKU AI Blended-Learning.pptx
Spectroscopy.pptx food analysis technology
Big Data Technologies - Introduction.pptx
The AUB Centre for AI in Media Proposal.docx
Approach and Philosophy of On baking technology
MYSQL Presentation for SQL database connectivity
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Teaching material agriculture food technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
The Rise and Fall of 3GPP – Time for a Sabbatical?
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...
Review of recent advances in non-invasive hemoglobin estimation
A Presentation on Artificial Intelligence
Profit Center Accounting in SAP S/4HANA, S4F28 Col11

The Mystery of Event Loop in JavaScript