Область видимости и параметры функций JavaScript

Пусть у нас есть функция, принимающая параметром число:

function func(localNum) { alert(localNum); }

Пусть снаружи функции есть переменная num:

function func(localNum) { alert(localNum); } let num = 1; // внешняя глобальная переменная

Давайте вызовем нашу функцию, передав ей параметром переменную num:

function func(localNum) { alert(localNum); } let num = 1; func(num); // вызываем функцию с параметром, выведет 1

Получится, что внутри функции будет доступна как переменная localNum (параметр функции), так и переменная num (как внешняя переменная):

function func(localNum) { alert(num); // выведет 1 alert(localNum); // выведет 1 } let num = 1; func(num);

Сама переменная localNum будет локальной переменной функции и не будет доступна извне:

function func(localNum) { } let num = 1; func(num); // вызываем функцию с параметром alert(localNum); //!! выдаст ошибку

Так как переменная localNum - локальная, то никакие изменения с ней ничего не поменяют снаружи:

function func(localNum) { localNum = 2; // ничего не меняет снаружи } let num = 1; func(num);

Если же поменять внутри переменную num (глобальную), то изменения появятся и снаружи:

function func(localNum) { num = 2; } let num = 1; func(num); alert(num); // выведет 2

Однако, если внутри функции объявить переменную переменную num через let, то мы создадим таким образом локальную переменную num, никак не влияющую на внешнюю переменную:

function func(localNum) { let num = 2; // объявим через let } let num = 1; func(num); alert(num); // выведет 1 - ничего не поменялось

Определите, не запуская код, что выведется на экран:

function func(localNum) { alert(localNum); } func(1);

Определите, не запуская код, что выведется на экран:

function func(localNum) { alert(localNum); } let num = 1; func(num);

Определите, не запуская код, что выведется на экран:

function func(localNum) { alert(localNum); } let num = 1; func(num); num = 2;

Определите, не запуская код, что выведется на экран:

let num = 1; function func(localNum) { alert(localNum); } num = 2; func(num);

Определите, не запуская код, что выведется на экран:

function func(localNum) { localNum = 2; } let num = 1; func(num); alert(num);

Определите, не запуская код, что выведется на экран:

function func(localNum) { num = 2; } let num = 1; func(num); alert(num);

Определите, не запуская код, что выведется на экран:

function func(localNum) { let num = 2; } let num = 1; func(num); alert(num);

Одноименные параметры

Как мы уже выяснили, параметры функции являются локальными переменными внутри нее.

Давайте назовем параметр функции таким же именем, как и внешнюю глобальную переменную:

function func(num) { alert(num); } let num = 1; func(num);

В данном случае у нас получится так, что снаружи функции будет переменная num и внутри функции будет переменная num.

Но это будут разные переменные! Изменение переменной num внутри функции будет приводить к изменению локальной переменной функции:

function func(num) { num = 2; // меняем локальную переменную } let num = 1; func(num); alert(num); // выведет 1 - ничего не поменялось

А внешняя переменная num внутри функции будет недоступна и не сможет быть изменена никаким способом.

Определите, не запуская код, что выведется на экран:

function func(num) { num = 2; } let num = 1; func(num); alert(num);

Определите, не запуская код, что выведется на экран:

function func() { num = 2; } let num = 1; func(); alert(num);

Определите, не запуская код, что выведется на экран:

function func() { let num = 2; } let num = 1; func(); alert(num);