DEV Community

Alok Kumar
Alok Kumar

Posted on

5 1

How JavaScript Works_01

Hey all πŸ‘‹

Now that I’m finished with the JavaScript ES6 concepts series ( expect an e-book soon πŸ™‚ ), I’ll be writing articles covering some fundamentals of JavaScript. And in this article, we’ll be talking about how JavaScript works and about execution context, so let’s start.

Overview

Before we start, we should know JavaScript is an interpreted language, which means it is not compiled before sending it to the browser.

After the code is sent to the browser, it is executed by the JavaScript Engine. JavaScript Engine is a computer program provided by browsers ( Example - V8 JavaScript Engine used by Google Chrome ).

JavaScript Engine creates Execution contexts to run the JavaScript code.

So let’s talk about what is an execution context?


Execution Context

To define it simply -

The environment in which your code is running is the Execution context. It gets created when your code is executed.

Let’s imagine it as a container with two components -

  • Memory Component
  • Code Component

The memory component stores all the variables, and functions which are stored as objects(key: value pairs). It is called Variable Environment.

The code is executed line by line in the code component. It is called Thread of Execution.

execution context

Let’s understand how Execution Context works with one small example -

var a = 5;

function add(num) {
  var res = num + num;
  return res;
}

var addA = add(a);

Enter fullscreen mode Exit fullscreen mode

To execute this JS code, a global execution context is created. It contains two components as we discussed earlier i.e. memory component and code component -

execution context

The code is executed in two phases -

  • Memory allocation phase
  • Code execution phase

Memory Allocation phase

In this phase, memory is allocated to all the variables and functions.

As for the above code -

execution context

You can see here that during the first phase, undefined is stored against the variables declared with keyword var, while in the case of functions, the whole function code is stored against the function name. We’ll see how this is executed in the next phase.

Code Execution phase -

JavaScript is a single-threaded language which means that the code will be executed line-by-line( but we know sometimes we have to handle asynchronous code, and that I’ll cover in some other article ).

Let’s see how the above code is executed step-by-step -

execution context

Here when the first line is executed it assigns value 5 to a.

There is nothing to execute for the lines from 3 to 6, so it moves to the last line, line number 8. And in the last line, there is a function invocation, and whenever a new function is invoked a new execution context gets created called Functional Execution Context.

execution context

Here we can see a new execution context is created when the add() function is invoked. And similar to what we have talked about, it goes through the same two phases: memory allocation and code execution.

Here we can see that after the first phase, memory is allocated for num and res. Let’s see what happens in the second phase -

execution context

In the second phase, the add() function is executed line by line -

In the third line, the value of a i.e. 5 which is passed as an argument, is allocated to num.

In the fourth line, num + num is executed, and the result is allocated to the variable res.

In the fifth line, the return keyword gives back the control to the execution context where the function was invoked ( which is the global context in this case ). Also, it returns the value of the res variable.

As it completes the second phase and the control is back to the previous execution context, then this functional execution context is deleted.

Execution context

Here we can see that the functional execution context is deleted, and the control is back to line number 8, where the returned value of the res variable is allocated to the addA variable.

And thus, there is no more code to execute so finally the whole global execution context is deleted.

execution context

So we just saw how a JavaScript code is executed, but what we have seen so far is an abstract of how everything works, and there are other things that work under the hood like JavaScript runtime, a CallStack which is used to manage all the execution contexts , etc. which I’ll cover in my next article, So stay tuned :)


I have tried to keep it simple and precise, and if you find any typo/error please report it to me so that I can correct it πŸ™‚

Thanks for reading it till last πŸ™

If you find this useful then you can share it with others :)

Let's Connect, drop a Hi and let's chat πŸ‘‹πŸ‘‹πŸ‘‹

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (1)

Collapse
 
manishaswain8 profile image

Came across this article recently.. the concept of Execution Context has been described in a very easy way πŸ‘

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay