JavaScript is amazing but it has some “quirks and features”. In this course, we'll dive into 'this', closures, recursion, hoisting, scopes and much, much more!
JavaScript is an amazing programming language - and a very versatile one, too.
But it also can be tricky at times.
There are some concepts in JavaScript, that often lead to confusion and errors - that's exactly what we'll dive into in this course!
This course will explore the following “tricky parts” in depth AND in understandable words, so that you can use this course both as a reference you come back to in the future as well as a resource to strengthen your JavaScript knowledge:
Scope & Hoisting
Callback Functions (Indirect vs Direct Function Execution)
Loops (yes, they do contain some “weird” parts)
Primitive vs Reference Values
Value Types & Type Coercion
Recursion
Closures
Asynchronous Code (Callbacks, Promises, async/ await)
The “this” Keyword
Prototypes
Those concepts will be explained in detail and theory as well as in practice with short and concise code snippets and examples.
You will learn:
What's tricky about those concepts
WHY it works the way it works
WHAT you should remember or keep in mind
Important: This course is NOT a course for beginners! JavaScript knowledge is expected!
But you don't have to be an expert or advanced user.
This course aims to help you understand those tricky concepts, it's also meant to be a resource you can dive into if you just want to look up one specific concept (instead of having to search through an entire JavaScript course).
Therefore, every course section is built such that it works standalone, independent from the other sections. There is no overarching course project or anything like that - instead, you get “to the point”, focused sections that have the goal of making those “tricky parts” less tricky as quickly as possible!
9+
hours
100+
lessons
Course Curriculum
Getting Started
Welcome to the Course! (1:53)
About this Course (5:14)
Course Requirements & Info (1:39)
How To Take This Course (2:05)
Join the Learning Community
Scopes & Hoisting
Module Introduction (0:30)
Getting Started (2:39)
Scope in Theory (2:31)
Introducing Global and Local (Function) Scope (4:07)
How Scope Works (6:47)
Getting to Know “Block Scope” (7:56)
Scope Overview (1:44)
Special Cases (11:02)
The Global Object (7:11)
Scope Across Files (4:13)
Modules & Scope (7:53)
Variable Shadowing (3:54)
Quiz: Scope
What is “Hoisting”? (4:00)
Hoisting in Action (7:32)
Hoisting Inside Of Functions (3:05)
“let” & “const” and Hoisting (5:57)
Hoisting Precedence (3:12)
Quiz: Hoisting
Module Resources
Direct vs Indirect Function Execution (Callbacks & Events)
Module Introduction (0:34)
Direct vs Indirect Function Execution (2:38)
Direct Execution in Action (3:30)
Indirect Execution in Action (4:53)
Indirect Execution With Anonymous Functions (2:24)
Indirect Execution and Passing Arguments (7:49)
Quiz: Direct vs Indirect Function Execution
Module Resources
Loops
Module Introduction (0:21)
Loops Overview (3:23)
The “for” Loop (6:09)
The “for” Loop with “let” (2:46)
The “for … in …” Loop (7:04)
The “for … of …” Loop (5:09)
Using forEach() (4:04)
Quiz: Loops
Module Resources
Primitive vs Reference Values
Module Introduction (0:39)
What are “Primitive” and “Reference Values”? (7:03)
Primitive Values in Action (6:27)
Reference Values in Action (3:00)
Behind the Scenes (2:32)
Immutability vs Mutability (2:35)
Primitive Wrapper Objects (4:37)
“const” & Mutation (5:32)
Reference Value Equality (6:06)
Copying Reference Values (13:01)
Quiz: Primitive vs Reference Values
Module Resources
Types & Type Coercion
Module Introduction (0:45)
What's Special About Types in JavaScript? (3:17)
What is “Coercion”? (5:48)
How Operators Influence Types & Coercion (6:14)
Coercion Rules (9:38)
Arithmetic Operators & Basic Comparisons (7:29)
Comparison Operators for Booleans & Coercion (5:59)
Truthy and Falsy Values (4:58)
Boolean Return Values (4:45)
Explicit Boolean Coercion with the Double Bang Operator (3:46)
Semi-explicit Value Coercion (2:57)
The Special Case of “null” (7:18)
More on null, undefined and NaN (4:10)
Objects & Arrays - Coercion Theory (3:41)
Objects & Arrays - Coercion in Action (5:18)
Objects & Comparisons (6:12)
Explicit Object Coercion (4:08)
Implicit Number Coercion for Objects (2:33)
Wrap Up (1:47)
Quiz & Time to Practice (16:29)
Module Resources
Recursion
Module Introduction (0:47)
What is “Recursion”? (8:36)
A Look Under The Hood (11:45)
Analyzing Recursion with the Browser DevTools (7:28)
Where Recursion Shines (20:52)
Quiz: Recursion
Module Resources
Closures
Module Introduction (0:47)
Closures in Theory (4:15)
Closures in Practice (2:27)
Multiple Environments & Closures (3:22)
How Closures Actually Work (5:39)
A Special Case (9:37)
Quiz: Closures
Module Resources
Asynchronous Code
Module Introduction (0:38)
What is “Async Code”? (5:24)
JavaScript is Single-Threaded! (4:17)
Callbacks (8:05)
Another Callback Example (2:50)
Promises (5:35)
Promises in Action (11:14)
Behind the Scenes of Promises (8:04)
Working with “then()” (5:06)
Promisifying APIs (3:24)
Handling Errors (10:16)
Using “catch()” (2:59)
Rejecting Promises - Behind the Scenes (3:19)
Using async/ await (8:20)
Quiz: Async Code
Module Resources
The “this” Keyword
Module Introduction (0:43)
What is “this” about? (6:14)
“this” in Action (3:27)
How “this” works (4:16)
Special & Tricky Cases (10:02)
“Fixing” “this”: Helper Variables & bind() (5:48)
Working with Arrow Functions (4:22)
Quiz: “this”
Module Resources
Prototypes & Inheritance
Module Introduction (0:41)
JavaScript Objects - Refresher (incl. Constructor Functions) (11:19)
What are “Prototypes” in JavaScript? (9:43)
Understanding Prototypes (5:49)
The Prototype Chain (3:15)
Setting & Changing Prototypes (3:46)
Pre-defining the Prototype on Constructor Functions (6:02)
Changing Prototypes (Patching) (6:37)
The Default Prototype and “Monkey Patching” (4:18)
Prototypes & “this” (2:51)
Protoypes, Classes & Methods (9:32)
Prototypes and the “constructor” Property (Method) (2:24)
Quiz: Prototypes
Module Resources