Outer variables access in JavaScript

Let's consider the following code:

javascriptlet num = 1; // set the value of the variable

function func() {
  console.log(num); // print it to the console
}

func(); // call the function

As I mentioned earlier, the variable value does not have to be before the function definition, the main thing is that it should be before the function call:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

In fact, this is not entirely true. Our function even before its call knows the value of the variable num:

javascriptlet num = 1;

function func() {
  console.log(num); // the function already knows that num = 1
}

Here's a more complicated example:

javascriptlet num = 1; // the function at this point learns that num = 1

function func() {
  console.log(num);
}

num = 2; // the function at this point learns that num = 2

Add function calls:

javascriptlet num = 1; // the function at this point learns that num = 1
func(); // shows 1

function func() {
  console.log(num);
}

func(); // shows 1
num = 2; // the function at this point learns that num = 2
func(); // shows 2

Once again: in fact, the function knows the values of external variables, even without being called.