5 JavaScript core concepts you should understand
Tags: javascript, beginners, webdev
Published: 2019-11-28 00:16:59

You might have heard JavaScript described as a single threaded, non-blocking, asynchronous, concurrent language. But did you know that JavaScript is also a high-level, garbage-collected, prototype-based, multi-paradigm, dynamic language?

As a new JavaScript developer, you don't need to know what these words mean in order to start building cool projects. But over time, understanding what JavaScript is will help with writing better code, as well as offer a better understanding of how code executes. Even several months in, I'm still constantly learning what some might call fundamental JavaScript concepts. 
 
Also, I know these concepts are way more complex than the few lines I’m allotting to each. But one of the challenges I've faced is that most blogs don’t try to distill these topics into manageable chunks that beginners can perceive. So I am oversimplifying these topics because that is the point.

Consider this blog to be the first in a series of blogs exploring fundamental JavaScript concepts not addressed in the average tutorial. This first post will not touch on the JavaScript runtime environment, but the next one(s) will.

####JavaScript Core Concepts

As stated earlier, JavaScript is also a high-level, garbage-collected, prototype-based, multi-paradigm, dynamic language. Now let's explore what each term means:

1. **High-level:**
  - Level (vs. low-level) refers to the level of abstraction from the computer's type. While the code is more programmer-friendly to read and write, that code will need to be transformed into machine-readable code.

2. **Garbage-collected:**
  - JavaScript has a background process to free up memory based on reachability. This is based on whether an object is referenced by or tied to any other object

3. **Prototype-based:** *(This explanation could be much better)*
  - JavaScript is prototype-based, (rather than class-based). All JavaScript objects have a prototype that they can inherit methods from. So not only does your object you create have access to the methods you explicitly define, it will also have access to the properties of its prototype going back to the Object.prototype.

4. **Multi-paradigm:**
  - While JavaScript is an object-oriented language in the sense it's based on objects with properties and methods, JavaScript supports both imperative and functional programming paradigms. 

5. **Dynamic:**
  - Dynamic refers to typing (e.g. number, string, boolean). Instead of specifying the type when you write the code and checking type at compilation, JavaScript does the type checking at runtime.

Before writing this post, it felt like I had a relative good grasp of these 5 concepts. But it was challenging to summarize them in a few sentences. But in researching for this post, I stumbled across [this video on JavaScript inheritance](https://www.youtube.com/watch?v=NwmJ73E-EAU). Nil did a great job tackling the topic in a relatively short video.

What did you think of my summary for each concept? If there's anything I got wrong or could explain better, please let me know. If there are any other concepts not on the list that consider core to growing as a developer, definitely let me know!