JavaScript - The Tricky Parts
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!
Start courseJavaScript 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!
Course content
Section 1Getting Started
- Welcome to the Course!1:53
- About this Course5:14
- Course Requirements & Info1:39
- How To Take This Course2:05
- Join the Learning CommunityPremium1:00
Section 2Scopes & Hoisting
- Module Introduction0:30
- Getting Started2:39
- Scope in Theory2:31
- Introducing Global and Local (Function) Scope4:07
- How Scope Works4:47
- Getting to Know "Block Scope"7:56
- Scope Overview1:44
- Special Cases11:02
- The Global Object7:11
- Scope Across Files4:13
- Modules & Scope7:53
- Variable Shadowing3:54
- Quiz: Scope1:00
- What is "Hoisting"?Premium4:00
- Hoisting in ActionPremium7:32
- Hoisting Inside Of FunctionsPremium3:05
- "let" & "const" and HoistingPremium5:57
- Hoisting PrecedencePremium3:12
- Quiz: HoistingPremium1:00
- Module ResourcesPremium1:00
Section 3Direct vs Indirect Function Execution (Callbacks & Events)
- Module IntroductionPremium0:34
- Direct vs Indirect Function ExecutionPremium2:38
- Direct Execution in ActionPremium3:30
- Indirect Execution in ActionPremium4:53
- Indirect Execution With Anonymous FunctionsPremium2:24
- Indirect Execution and Passing ArgumentsPremium7:49
- Quiz: Direct vs Indirect Function ExecutionPremium1:00
- Module ResourcesPremium1:00
Section 4Loops
- Module IntroductionPremium0:21
- Loops OverviewPremium3:23
- The "for" LoopPremium6:09
- The "for" Loop with "let"Premium2:46
- The "for ... in ..." LoopPremium7:04
- The "for ... of ..." LoopPremium5:09
- Using forEach()Premium4:04
- Quiz: LoopsPremium1:00
- Module ResourcesPremium1:00
Section 5Primitive vs Reference Values
- Module IntroductionPremium0:39
- What are "Primitive" and "Reference Values"?Premium7:03
- Primitive Values in ActionPremium6:27
- Reference Values in ActionPremium3:00
- Behind the ScenesPremium2:32
- Immutability vs MutabilityPremium2:35
- Primitive Wrapper ObjectsPremium4:37
- "const" & MutationPremium5:32
- Reference Value EqualityPremium6:06
- Copying Reference ValuesPremium13:01
- Quiz: Primitive vs Reference ValuesPremium1:00
- Module ResourcesPremium1:00
Section 6Types & Type Coercion
- Module IntroductionPremium0:45
- What's Special About Types in JavaScript?Premium3:17
- What is "Coercion"?Premium5:48
- How Operators Influence Types & CoercionPremium6:14
- Coercion RulesPremium9:38
- Arithmetic Operators & Basic ComparisonsPremium7:29
- Comparison Operators for Booleans & CoercionPremium5:59
- Truthy and Falsy ValuesPremium4:58
- Boolean Return ValuesPremium4:45
- Explicit Boolean Coercion with the Double Bang OperatorPremium3:46
- Semi-explicit Value CoercionPremium2:57
- The Special Case of "null"Premium7:18
- More on null, undefined and NaNPremium4:10
- Objects & Arrays - Coercion TheoryPremium3:41
- Objects & Arrays - Coercion in ActionPremium5:18
- Objects & ComparisonsPremium6:12
- Explicit Object CoercionPremium4:08
- Implicit Number Coercion for ObjectsPremium2:33
- Wrap UpPremium1:47
- Quiz & Time to PracticePremium16:29
- Module ResourcesPremium1:00
Section 7Recursion
- Module IntroductionPremium0:47
- What is "Recursion"?Premium8:36
- A Look Under The HoodPremium11:45
- Analyzing Recursion with the Browser DevToolsPremium7:28
- Where Recursion ShinesPremium20:52
- Quiz: RecursionPremium1:00
- Module ResourcesPremium1:00
Section 8Closures
- Module IntroductionPremium0:47
- Closures in TheoryPremium4:15
- Closures in PracticePremium2:27
- Multiple Environments & ClosuresPremium3:22
- How Closures Actually WorkPremium5:39
- A Special CasePremium9:37
- Quiz: ClosuresPremium1:00
- Module ResourcesPremium1:00
Section 9Asynchronous Code
- Module IntroductionPremium0:38
- What is "Async Code"?Premium5:24
- JavaScript is Single-Threaded!Premium4:17
- CallbacksPremium8:05
- Another Callback ExamplePremium2:50
- PromisesPremium5:35
- Promises in ActionPremium11:14
- Behind the Scenes of PromisesPremium8:04
- Working with "then()"Premium5:06
- Promisifying APIsPremium3:24
- Handling ErrorsPremium10:16
- Using "catch()"Premium2:59
- Rejecting Promises - Behind the ScenesPremium3:19
- Using async/ awaitPremium8:20
- Quiz: Async CodePremium1:00
- Module ResourcesPremium1:00
Section 10The "this" Keyword
- Module IntroductionPremium0:43
- What is "this" about?Premium6:14
- "this" in ActionPremium3:27
- How "this" worksPremium4:16
- Special & Tricky CasesPremium10:02
- "Fixing" "this": Helper Variables & bind()Premium5:48
- Working with Arrow FunctionsPremium4:22
- Quiz: "this"Premium1:00
- Module ResourcesPremium1:00
Section 11Prototypes & Inheritance
- Module IntroductionPremium0:41
- JavaScript Objects - Refresher (incl. Constructor Functions)Premium11:19
- What are "Prototypes" in JavaScript?Premium9:43
- Understanding PrototypesPremium5:49
- The Prototype ChainPremium3:15
- Setting & Changing PrototypesPremium3:46
- Pre-defining the Prototype on Constructor FunctionsPremium6:02
- Changing Prototypes (Patching)Premium6:37
- The Default Prototype and "Monkey Patching"Premium4:18
- Prototypes & "this"Premium2:51
- Protoypes, Classes & MethodsPremium9:32
- Prototypes and the "constructor" Property (Method)Premium2:24
- Quiz: PrototypesPremium1:00
- Module ResourcesPremium1:00
Course instructor
Maximilian Schwarzmüller
As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.
The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.