JavaScript is one of the most popular and widely used programming languages in the world right now. It’s growing faster than any other programming language, big companies like Netflix, Walmart, Paypal, build entire applications around JavaScript. So, it’s a great opportunity to get a good job learning JavaScript. You can work as a front-end developer or back-end developer or a full stack developer, or who knows both the front-end and the back-end.

What can you do with JavaScript?

For a long time, JavaScript was only used in browsers to build interactive web pages. Some developers referred JavaScript as a toy language. But those days are gone because of huge community support and investments like large companies like Facebook and Google. These days you can build full-blown web and mobile apps as well as real-time networking apps like chats and video streaming services, command-line tools, and even games with JavaScript.

Where does JavaScript code run?

JavaScript was originally designed to run on only browsers. So, every browser has what we call a JavaScript Engine that can execute JavaScript code. For example, the JavaScript engines for Firefox and Chrome are SpiderMonkey and V8, In 2009, a very clever engineer called Ryan Dahl took the open-source JavaScript engine in Chrome and embedded it inside a C++ program. He calls that program a Node. So, Node is a C++ program, that includes the Google V8 JavaScript engine. Now with this, we can code JavaScript outside of a browser. We can pass our code to Node for execution. So, in a nutshell, JavaScript code can be run inside of a browser or in Node. Browsers and Node provide a runtime environment for JavaScript code.

We have designed a basic guideline that will help you to know the fundamental of programming in JavaScript. Once you have finished this, you will have taken the first step towards becoming a skillful front-end developer. Are you ready to dive into JavaScript? Then let’s get started.

1. Course Introduction
          1.1.  Welcome to our Bootcamp
          1.2.  The story of this course?
          1.3.  How to set up the environments?

2. JavaScript Fundamentals
          2.1.  Introduction to Compiler and Engine
                  2.1.1.  What are the compiler and interpreter
                  2.1.2.  Interpreter versus Compiler
                  2.1.3.  What is the JIT compiler and how does it work?
                  2.1.4.  Is JavaScript an interpreted or compiled language?
                  2.1.5.  Types of JS engine
                  2.1.6.  What’s the difference between compiling and polyfilling?
          2.2.  What is the thread of execution context?
                  2.2.1.  Global execution context
                  2.2.2.  Function or Local execution context
          2.3.  What is the thread of execution context?
                  2.3.1.  Global Scope
                  2.3.2.  Local Scope & Lexical Scope
          2.4.  What is hoisting?
          2.5.  What is closure in JavaScript?
          2.6.  What are the callback and higher-order functions?
          2.7.  What is the “this” keyword in JavaScript?
          2.8.  What is call by value and call by reference?
          2.9.  What is IIFE?
          2.10.  What is the pure function?
          2.11.  What does use strict do in JavaScript?
          2.12.  Bind, Call, Apply in JavaScript
          2.13.  What is an array? And its methods?

3. Introduction to DOM
          3.1.  What is the Window Object in DOM?
          3.2.  What is the Document Object in DOM?
          3.3.  Basic Selectors in DOM
          3.4.  Query Selectors in DOM
          3.5.  What is the difference between getElement and Query selectors?
          3.6.  How to traverse DOM elements?
          3.7.  How to create DOM elements?
          3.8.  How to insert the created elements?
          3.9.  How to update and remove the DOM element?
          3.10.  How to clone a node including its child elements?
          3.11.  What is the difference between event capturing and bubbling?
          3.12.  What are the events Delegation and Propagation?
          3.13.  Input elements and event handling
          3.14.  How to handle form data in DOM?
          3.15.  How to validate form data in DOM?

4. Client Storage
          4.1.  Cookies
          4.2.  localStorage
          4.3.  sessionStorage
          4.4.  indexedDB

5. Asynchronous in JavaScript
          5.1.  Understanding asynchronous programming in JavaScript
          5.2.  How to handle asynchronous operations in JavaScript?
          5.3.  What is Ajax?
          5.4.  How to handle XMLHttpRequest?
          5.5.  How to send GET, POST, PATCH, PUT and DELETE requests and display data?
          5.6.  What is the event loop in JavaScript?

6. Error handling in JavaScript
          6.1.  How to handle errors in JavaScript?
          6.2.  Error handling with if-else condition check
          6.3.  Error handling with try-catch-finally block
          6.4.  How to throw an Error in JavaScript

7. Introduction to OOP in JavaScript
          7.1.  What is OOP?
          7.2.  How to think of everything as an Object?
          7.3.  What are object Properties and Methods?
          7.4.  What is Class in OOP?
          7.5.  Create a class using the factory pattern
          7.6.  Creating class using Constructor Pattern
          7.7.  What is the “New” Keyword and How does it work?
          7.8.  What is Abstraction in JavaScript
          7.9.  Hide Private Properties in JavaScript
          7.10.  Polymorphism in JavaScript
          7.11.  How to Use Getter Setter in JavaScript
          7.12.  Prototype and Prototypical Inheritance in JavaScript
          7.13.  Multilevel Inheritance in JavaScript

8. Introduce ES6 to ES10
          8.1.  What is ES6?
          8.2.  Tooling
          8.3.  Let and Const
          8.4.  Template Literals
          8.5.  Object Literals
          8.6.  Assignment Destructuring
          8.7.  Spread Operator, Rest Parameters, and Default Parameters
          8.8.  Arrow Functions
          8.9.  find, fill
          8.10.  For…of, for…in,
          8.11.  Classes
          8.12.  Symbols
          8.13.  Iterators and Generators
          8.14.  Promises
          8.15.  async/await
          8.16.  Maps and Sets
          8.17.  WeakMaps and WeakSets
          8.18.  Proxies
          8.19.  Reflection
          8.20.  Number
          8.21.  Math
          8.22.  Array
          8.23.  Object
          8.24.  Modules
          8.25.  String Padding
          8.26.  Exponential Operator
          8.27.  Trailing Comma
          8.28.  Object.keys(), Object.values() and Object.entries()
          8.29.  Array.prototype.includes()
          8.30.  Array.flat() and Array.flatMap()
          8.31.  Global This
          8.32.  Optional chaining and Nullish Coalescing Operator

9. Introduction to TypeScript
          9.1.  Introduction to TypeScript
          9.2.  What is the thread of execution context?
                  9.2.1.  Type Annotation
                  9.2.2.  Type Inference
                  9.2.3.  Number Type
                  9.2.4.  String Type
                  9.2.5.  Boolean Type
                  9.2.6.  Object Type
                  9.2.7.  Array Type
                  9.2.8.  Tuple Type
                  9.2.9.  Enum Type
                  9.2.10.  Any Type
                  9.2.11.  Never Type
                  9.2.12.  Union Type
                  9.2.13.  Type Aliases
          9.3.  Functions
                  9.3.1.  Function
                  9.3.2.  Functions Type
                  9.3.3.  Optional Parameters
                  9.3.4.  Default Parameters
                  9.3.5.  Rest Parameters
          9.4.  Advanced Types
                  9.4.1.  Classes
                  9.4.2.  Interfaces
                  9.4.3.  Generics
                  9.4.4.  Decorators
                  9.4.5.  Modules
                  9.4.6.  Namespaces
          9.5.  Build a small admin template project using typescript