You don't know js(up & going)


Download 424.95 Kb.
Pdf ko'rish
bet39/53
Sana08.11.2023
Hajmi424.95 Kb.
#1757840
1   ...   35   36   37   38   39   40   41   42   ...   53
Bog'liq
You don\'t know JS(up & going)

_____________________________________________________


Значение `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

Download 424.95 Kb.

Do'stlaringiz bilan baham:
1   ...   35   36   37   38   39   40   41   42   ...   53




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling