• Теория
  • Теория

Область видимости

Ошибка обнаружена! Индекс последнего элемента в массиве photos4, а значение i в нашем коде 5, по какой миниатюре мы бы ни кликнули. В массиве photos у нас нет элемента с таким индексом, поэтому мы и получаем undefined вместо адреса изображения и никакой картинки не появляется. Но почему такое вообще происходит?

Давайте немного отойдём в сторону от нашей задачи и разберёмся с одной важной концепцией JavaScript. Это поможет решить нашу проблему с галереей.

Напишем функцию eatDinner. Она выводит в консоль сообщения о нашем обеде. У неё есть параметр drink и переменная food

var eatDinner = function (drink) {
  var food = 'макароны';
  console.log('Поел ' + food);
  console.log('Выпил ' + drink);
};

eatDinner('компот');
// Выведет: Поел макароны
// Выведет: Выпил компот

console.log('Поел ' + food);
// Выведет ошибку

console.log('Выпил ' + drink);
// Выведет ошибку

Если мы попробуем снаружи получить доступ к переменной food у нас ничего не получится — консоль выдаст ошибку. Потому что переменные из тела функции доступны только внутри этой функции. Снаружи их получить нельзя.

То же самое произойдёт, если мы захотим обратиться снаружи к параметру функции. Параметр хоть и задаётся снаружи, ведёт себя, как переменная внутри функции.

Почему так?

Потому что у каждой функции есть область видимости — все значения, доступные для этой функции. Область видимости ограничивается самой функцией. Так как переменная food объявлена внутри функции eatDinner, она доступна только внутри области видимости этой функции, как и параметр drink. Такие переменные называются локальными переменными функции. Их область видимости ограничена функцией, в которой они объявлены, и за её пределами эти переменные получить нельзя, поэтому такая область видимости тоже называется локальной.

Давайте в этом убедимся. Вызовем функцию, а затем снаружи попробуем получить доступ к параметру и переменной из тела функции eatDinner.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Знакомство с событиями» тренажёра «Погружение в браузерный JavaScript» можно после регистрации и оформления подписки.