_____________________________________________________
Значение `42` `возвращается` из выполненной `IIFE` функции, а затем
присваивается в `x`.
Замыкание
*Замыкание* является одной из самых важных и зачастую наименее понятных
концепций в JavaScript. Я не буду вдаваться в подробности сейчас, а вместо
этого направляю вас в книгу *Область видимости и замыкания* этой серии. Но я
хотел бы сказать несколько слов о замыканиях, чтобы вы понимали общую
концепцию. Это будет важной техникой в вашем наборе навыков в JS.
Вы можете думать о замыкании как о способе "запомнить" и продолжить работу
в области видимости функции (с ее переменными) даже когда функция уже
закончила свою работу.
Проиллюстрируем:
____________________________________________________________________
function makeAdder(x) {
// параметр `x` - внутренняя переменная
// внутренняя функция `add()` использует `x`, поэтому
// у нее есть "замыкание" на нее
function add(y) {
return y + x;
};
return add;
}
____________________________________________________________________
Ссылка на внутреннюю функцию `add(..)`, которая возвращается с каждым
вызовом внешней `makeAdder(..)`, умеет запоминать какое значение `x` было
передано в `makeAdder(..)`. Теперь давайте используем `makeAdder(..)`:
____________________________________________________________________
// `plusOne` получает ссылку на внутреннюю функцию `add(..)`
// с замыканием на параметре `x`
// внешней `makeAdder(..)`
var plusOne = makeAdder( 1 );
// `plusTen` получает ссылку на внутреннюю функцию `add(..)`
// с замыканием на параметре `x`
// внешней `makeAdder(..)`
var plusTen = makeAdder( 10 );
plusOne( 3 );
// 4 ⟵ 1 + 3
plusOne( 41 );
// 42 ⟵ 1 + 41
plusTen( 13 );
// 23 ⟵ 10 + 13
Do'stlaringiz bilan baham: |