- Теория
- Теория
Собираемся в школу
Всё работает. На функцию никак не влияют глобальные переменные.
Наш пример рабочий, но он жёстко привязан к значению внутри функции collectContainer
. Может школьник не хочет есть каждый раз только макароны? Нужно дать ему возможность выбора. Да и чаще всего мы передаём какие-то значения в функцию, а не жёстко фиксируем их внутри локальной области видимости. Добавим функции collectContainer
параметр.
var collectContainer = function (food) {
return function () {
console.log('Поел ' + food);
};
};
var schoolkid = collectContainer('макароны');
schoolkid();
// Выведет: Поел макароны
Теперь значение food
будет использовано из параметра, а не из локальной переменной функции collectContainer
. Работать всё будет точно так же. Функция, которую возвращает collectContainer
, будет запоминать значение параметра и использовать его при своём вызове.
Внутреннюю функцию мы сделали анонимной, потому что имя eatDinner
нигде не используется. Это никак не повлияет на работу функции.
Представим, что школьников теперь двое. Каждый из них возьмёт из дома контейнер с едой.
Убедимся, что переопределение глобальных переменных не повлияет на работу нашей функции collectContainer
.
Обратите внимание, что каждый раз, когда мы будем вызывать функцию collectContainer
и записывать результат в переменную, в памяти будет создаваться новое замыкание, которое будет помнить о значении параметра food
в момент своего создания.
- index.html
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.