В уроке Flatiron, который я делаю для замыканий, есть следующий пример:
function retailPriceMaker(manufacturePrice) {
return function(marketMultiplier) {
return marketMultiplier * manufacturePrice;
};
}
const retailPriceForNine = retailPriceMaker(9);
retailPriceForNine(2);
// 18
В уроке, конечно, говорится о том, как при объявлении функции внутри retailPriceMaker
замыкание имеет доступ(закрытие) переменных в своей области видимости, то есть manufacturePrice
, и сохраняет их даже при вызове позже.
Я понимаю это настолько, насколько это причиняет боль моему мозгу.
Один способ, который делает это намного проще для меня, это думать об этом так:
retailPriceMaker(9)
возвращает следующую функцию:
function(marketMultiplier) {
return marketMultiplier * 9;
};
Где тот факт, что когда-либо существовала переменная с именем manufacturePrice
, не имеет значения и может быть также удален из книг истории возвращенной функции.
Идея, чтозамыкание «записывает» значения, которые ему передают, вместо того, чтобы думать о переменных / аргументах, на которые ссылаются при кажущемся заочном, НАМНОГО легче обернуть мою голову.
Итак мой вопрос: это правильный способ думать ое закрытия или я что-то упустил?Это кажется немного слишком простым, и я предположил бы, что если бы мое объяснение было полностью верным:
- Действительно, замыкания можно было бы изучать таким образом
- Консоль JavaScript показала бы "заполненный"в "функции, когда вы вызываете возвращаемую функцию:
function retailPriceMaker(manufacturePrice) {
return function(marketMultiplier) {
return marketMultiplier * manufacturePrice;
};
}
const retailPriceForNine = retailPriceMaker(9);
retailPriceForNine;
// ƒ (marketMultiplier) {
// return marketMultiplier * 9;
// }
Итак, что, если что, я пропускаю?Или я просто перевернул мир с ног на голову?(крайне маловероятно)