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

Собираемся в школу

Всё работает. На функцию никак не влияют глобальные переменные.

Наш пример рабочий, но он жёстко привязан к значению внутри функции collectContainer. Может школьник не хочет есть каждый раз только макароны? Нужно дать ему возможность выбора. Да и чаще всего мы передаём какие-то значения в функцию, а не жёстко фиксируем их внутри локальной области видимости. Добавим функции collectContainer параметр.


var collectContainer = function (food) {
  return function () {
    console.log('Поел ' + food);
  };
};

var schoolkid = collectContainer('макароны');
schoolkid();
// Выведет: Поел макароны

Теперь значение food будет использовано из параметра, а не из локальной переменной функции collectContainer. Работать всё будет точно так же. Функция, которую возвращает collectContainer, будет запоминать значение параметра и использовать его при своём вызове.

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

Представим, что школьников теперь двое. Каждый из них возьмёт из дома контейнер с едой.

Убедимся, что переопределение глобальных переменных не повлияет на работу нашей функции collectContainer.

Обратите внимание, что каждый раз, когда мы будем вызывать функцию collectContainer и записывать результат в переменную, в памяти будет создаваться новое замыкание, которое будет помнить о значении параметра food в момент своего создания.

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

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

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

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

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

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