JavaScript: Understanding the Weird Parts

An advanced JavaScript course for everyone! Scope, closures, prototypes, 'this', build your own framework, and more.
4.7 (8,709 ratings) Instead of using a simple lifetime average, Udemy calculates a
course's star rating by considering a number of different factors
such as the number of ratings, the age of ratings, and the
likelihood of fraudulent ratings.
45,346 students enrolled
$175
Take This Course
  • Lectures 85
  • Contents Video: 11.5 hours
    Other: 3 mins
  • Skill Level All Levels
  • Languages English, captions
  • Includes Lifetime access
    30 day money back guarantee!
    Available on iOS and Android
    Certificate of Completion
Wishlisted Wishlist

How taking a course works

Discover

Find online courses made by experts from around the world.

Learn

Take your courses with you and learn anywhere, anytime.

Master

Learn and practice real-world skills and achieve your goals.

About This Course

Published 3/2015 English Closed captions available

Course Description

Javascript is the language that modern developers need to know, and know well. Truly knowing Javascript will get you a job, and enable you to build quality web and server applications.

NOTE: This course includes information on ECMAScript 6 (ES6) the next version of Javascript!

In this course you will gain a deep understanding of Javascript, learn how Javascript works under the hood, and how that knowledge helps you avoid common pitfalls and drastically improve your ability to debug problems. You will find clarity in the parts that others, even experienced coders, may find weird, odd, and at times incomprehensible. You'll learn the beauty and deceptive power of this language that is at the forefront of modern software development today.

This course will cover such advanced concepts as objects and object literals, function expressions, prototypical inheritance, functional programming, scope chains, function constructors (plus new ES6 features), immediately invoked function expressions (IIFEs), call, apply, bind, and more.

We'll take a deep dive into the source code of popular frameworks such as jQuery and Underscore to see how you can use your understanding of Javascript to learn (and borrow) from other's good code.

Finally, you'll learn the foundations of how to build your own Javascript framework or library.

What you'll learn in this course will make you a better Javascript developer, and improve your abilities in AngularJS, NodeJS, jQuery, React, Ember, MongoDB, and all other Javascript-based technologies!

Learn to love Javascript, and code in it well.

Note: In this course you'll also get downloadable source code. You will often be provided with 'starter' code, giving you the base for you to start writing your code, and 'finished' code to compare your code to.

What are the requirements?

  • Basic Javascript knowledge (variables, loops, and basic functions - that's all the course expects you to know!)
  • A browser and text editor

What am I going to get from this course?

  • Grasp how Javascript works and it's fundamental concepts
  • Write solid, good Javascript code
  • Understand advanced concepts such as closures, prototypal inheritance, IIFEs, and much more.
  • Drastically improve your ability to debug problems in Javascript.
  • Avoid common pitfalls and mistakes other Javascript coders make
  • Understand the source code of popular Javascript frameworks
  • Build your own Javascript framework or library

What is the target audience?

  • Those with basic Javascript skills who wish to improve
  • Experienced coders coming from other programming languages
  • New and experienced Javascript coders who want to deepen their understanding of the language
  • Anyone who has found concepts just as object prototypes, closures, and other advanced concepts difficult to learn
  • Those who have suffered surprising errors while writing Javascript, and want to learn why and how to avoid them
  • Those interested in building their own frameworks, or being better able to learn from the source code of other well-known frameworks and libraries

What you get with this course?

Not for you? No problem.
30 day money back guarantee.

Forever yours.
Lifetime access.

Learn on the go.
Desktop, iOS and Android.

Get rewarded.
Certificate of completion.

Curriculum

Section 1: Getting Started
Introduction and The Goal of This Course
Preview
04:56
Setup
03:27
Big Words and Javascript
01:25
Watching this Course in High Definition
Article
Understanding, Frameworks, and The Weird Parts
Preview
04:17
Section 2: Execution Contexts and Lexical Environments
Conceptual Aside: Syntax Parsers, Execution Contexts, and Lexical Environments
Preview
07:35
Conceptual Aside: Name/Value Pairs and Objects
Preview
04:08
Downloading Source Code for This Course
Preview
Article
The Global Environment and The Global Object
Preview
10:58
The Execution Context - Creation and Hoisting
Preview
09:43
Conceptual Aside: Javascript and 'undefined'
Preview
08:04
The Execution Context - Code Execution
Preview
02:54
Conceptual Aside: Single Threaded, Synchronous Execution
Preview
02:16
Function Invocation and the Execution Stack
Preview
08:06
Functions, Context, and Variable Environments
Preview
07:56
The Scope Chain
Preview
17:25
Scope, ES6, and let
Preview
04:18
What About Asynchronous Callbacks?
Preview
10:26
Section 3: Types and Operators
Conceptual Aside: Types and Javascript
Preview
02:50
Primitive Types
Preview
05:17
Conceptual Aside: Operators
Preview
06:32
Operator Precedence and Associativity
Preview
14:14
Operator Precedence and Associativity Table
Preview
Article
Conceptual Aside: Coercion
Preview
06:14
Comparison Operators
Preview
19:42
Equality Comparisons Table
Preview
Article
Existence and Booleans
Preview
07:24
Default Values
Preview
07:51
Framework Aside: Default Values
Preview
07:11
Section 4: Objects and Functions
Objects and the Dot
15:23
Objects and Object Literals
10:32
Framework Aside: Faking Namespaces
08:07
JSON and Object Literals
07:17
Functions are Objects
08:02
Function Statements and Function Expressions
20:32
Conceptual Aside: By Value vs By Reference
16:09
Objects, Functions, and 'this'
21:26
Conceptual Aside: Arrays - Collections of Anything
05:39
'arguments' and spread
12:00
Framework Aside: Function Overloading
04:43
Conceptual Aside: Syntax Parsers
02:25
Dangerous Aside: Automatic Semicolon Insertion
05:46
Framework Aside: Whitespace
04:25
Immediately Invoked Functions Expressions (IIFEs)
17:07
Framework Aside: IIFEs and Safe Code
08:05
Understanding Closures
11:09
Understanding Closures - Part 2
19:20
Framework Aside: Function Factories
12:24
Closures and Callbacks
08:26
call(), apply(), and bind()
20:54
Functional Programming
20:17
Functional Programming - Part 2
08:05
Section 5: Object-Oriented Javascript and Prototypal Inheritance
Conceptual Aside: Classical vs Prototypal Inheritance
05:11
Understanding the Prototype
14:02
Everything is an Object (or a primitive)
05:46
Reflection and Extend
14:59
Section 6: Building Objects
Function Constructors, 'new', and the History of Javascript
15:53
Function Constructors and '.prototype'
10:24
Dangerous Aside: 'new' and functions
04:16
Conceptual Aside: Built-In Function Constructors
10:32
Dangerous Aside: Built-In Function Constructors
03:57
Dangerous Aside: Arrays and for..in
03:16
Object.create and Pure Prototypal Inheritance
12:37
ES6 and Classes
06:27
Section 7: Odds and Ends
Initialization
05:41
'typeof' , 'instanceof', and Figuring Out What Something Is
06:41
Strict Mode
05:51
Strict Mode Reference
Article
Section 8: Examining Famous Frameworks and Libraries
Learning From Other's Good Code
03:51
Deep Dive into Source Code: jQuery - Part 1
21:31
Deep Dive into Source Code: jQuery - Part 2
15:38
Deep Dive into Source Code: jQuery - Part 3
11:22
Section 9: Let's Build a Framework / Library!
Requirements
02:57
Structuring Safe Code
03:07
Our Object and Its Prototype
09:17
Properties and Chainable Methods
16:58
Adding jQuery Support
05:22
Good Commenting
02:21
Let's Use Our Framework
08:11
A Side Note
00:32
Section 10: BONUS Lectures
TypeScript, ES6, and Transpiled Languages
04:33
Transpiled Languages References
Article
Section 11: BONUS: Getting Ready for ECMAScript 6
Existing and Upcoming Features
00:54
ES6 Features Reference
Article
Section 12: Conclusion
Learning to Love the Weird Parts
01:14

Students Who Viewed This Course Also Viewed

  • Loading
  • Loading
  • Loading

Instructor Biography

Anthony Alicea, Software Developer, Architect, and UX Designer

Newly married in Cleveland Ohio, Tony is primarily focused these days on trying to be a good husband. While inexperienced at that, he's quite experienced in all things web.

Tony has been programming since he was 12 years old, and got into web sites and web application development at 16. After graduating with a Computer Science degree from Case Western Reserve University, Tony continued with that interest as a Microsoft certified software application developer and architect, database designer, and user interface designer.

His experience has ranged across technologies such as HTML5, CSS3, ASP .NET MVC, JavaScript, jQuery, KnockoutJS, AngularJS, NodeJS, LESS, Bootstrap, SQL, Entity Framework and more.

He believes strongly that deeply understanding any topic allows you to properly learn it and, even more importantly in a real-world environment, quickly overcome problems.

He also has a deep interest in human nature and behavior, and how that impacts human-computer interaction. This interest translated into extending his career into user experience design and usability research.

Another link in the chain is his 25 years of experience in public speaking and teaching, both in front of large groups and as a one-on-one private instructor.

Putting all these pieces together, he has spent his career listening to a client need, designing a database and software to meet that need, building it, testing it, teaching others how to use it, then improving user experience by watching people actually use it and adjusting accordingly.

Tony loves teaching every aspect of what he does, and even more loves teaching in a way that imparts understanding, as opposed to just examples intended to be parroted. He loves that moment when a student 'gets it', and that's what he wants for you when you take one of his courses.

He has found that those that learn purely by example, and not by understanding, end up much more limited than they need to be.

"Examples need to be built on top of context, and once you have context, you can not only copy the examples you find, but adjust and improve upon them."

He firmly believes that everyone has the ability to develop software, if they are just taught properly. Including you.

"It is my pleasure and privilege to teach you. I hope you'll come away knowing something you didn't before, understanding at a level deeper than before, and feeling positive that you can accomplish what you've set out to accomplish. Thank you!" - Tony Alicea

Ask Tony a question, read a post, or follow him around internet.

Ready to start learning?
Take This Course