|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
|||||||||||
Замыкание29.07.2019, 12:35. Показов 2409. Ответов 25
Метки нет (Все метки)
Здравствуйте. Не могу разобраться по теме замыкания.
Вот есть код
Она как бы работает, но если я повторно ее вызову, то значение не увеличивается, а остается таким же как и было.
0
|
|||||||||||
| 29.07.2019, 12:35 | |
|
Ответы с готовыми решениями:
25
Замыкание Замыкание Замыкание |
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
||||||
| 29.07.2019, 12:48 | ||||||
|
Здравствуйте.
А здесь переменная на самом деле - ссылка на функцию.
Этот паттерн крайне не эффективный и ненормально сложный для новичка.
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
|
| 29.07.2019, 13:05 [ТС] | |
|
amr-now, А почему ссылка? Просто смотрю эти мануалы везде и все вызывают эту функцию с переменной, но не поясняют почему.
По какой причине я не могу вызвать эту функцию без переменной? Почему этот счетчик не работает?
0
|
|
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
||
| 29.07.2019, 13:08 | ||
currentCount = 1 заново, а при использовании переменной в ней хранится функция которая просто увеличивает currentCount. Т.е. при первом вызове с помощью counter возвращается 1 (которое было задано при первом вызове функции), и currentCount увеличивается на 1, при втором вызове вам возвращается уже увеличенное значение currentCount и оно опять увеличивается на 1 и т.д. При этом повторного переназначения currentCount уже не происходит, так как counter содержит в себе только внутреннюю функцию.Как-то так. Что-бы работал такой makeCounter()() вызов, вам нужно вынести currentCount в глобальную область видимости.
0
|
||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|||||||
| 29.07.2019, 13:13 | |||||||
() создается экземпляр функции, на который никто и никогда в жизни ссылаться не будет.Это природное явление в программировании называется "слабая ссылка". Затем этот экземпляр функции один раз в жизни вызвать вторыми (). Функция вернет число и умрёт, забытая всеми. То есть сработает один раз в жизни. Добавлено через 2 минуты Чтобы два раза не вставать, реализуем то же самое в парадигме ООП:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
||
| 29.07.2019, 13:31 [ТС] | ||
|
AlexZaw, Получается, если, как сказал
0
|
||
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
|||||||
| 29.07.2019, 13:54 | |||||||
counter() переменная counter хранит в себе ссылку на
1
|
|||||||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
||||||||||||||||
| 29.07.2019, 14:58 [ТС] | ||||||||||||||||
|
AlexZaw, Спасибо. Не могли бы Вы пояснить, почему мы ссылку передаем со скобками?
0
|
||||||||||||||||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|||
| 29.07.2019, 15:24 | |||
|
Вот здесь как раз происходит разрыв шаблона у новичков. Неоправданная сложность алгоритма. --- Ссылка будет не на функцию makeCounter, а на новую анонимную функцию. Добавлено через 4 минуты А поскольку окружение каждый раз при вызове makeCounter() создается заново, то currentCount в этот момент бесконечно будет становиться единицей.
0
|
|||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
|||
| 29.07.2019, 15:41 [ТС] | |||
|
amr-now,
0
|
|||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 29.07.2019, 15:45 | |
|
Devero, никак. Попейте кофе. Прочитайте еще раз эту переписку четыре раза.
Почитайте https://learn.javascript.ru/closures и https://developer.mozilla.org/... t/Closures
1
|
|
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
||||||
| 29.07.2019, 16:34 [ТС] | ||||||
|
amr-now, Спасибо. Буду разбираться и вникать. Может быть у вас получится разъяснить еще о скобках, оборачивающих саму функцию?
0
|
||||||
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
||
| 29.07.2019, 17:07 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
|
| 29.07.2019, 17:12 [ТС] | |
|
AlexZaw, Это я уже выяснил по литературе. Но сами скобки являются неким синтаксисом или можно по-другому еще это осуществить?
0
|
|
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
|||||||||||
| 29.07.2019, 17:29 | |||||||||||
|
Devero, Можно еще так:
0
|
|||||||||||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
||||||
| 29.07.2019, 17:48 | ||||||
|
Devero, сейчас мода вот так объявлять:
В NodeJS так делать вообще типа круто. Программа сопли пузырями.
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 207
|
||
| 29.07.2019, 17:53 [ТС] | ||
|
AlexZaw, первый вариант точно такой же как я привел выше, а второй работать не будет, если исходить из того, что написано здесь - https://learn.javascript.ru/closures-module (не реклама).
Только вот не могу понять, что значит :
0
|
||
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
|||||||
| 29.07.2019, 19:05 | |||||||
|
Добавлено через 16 секунд Добавлено через 54 минуты amr-now, а нормальное объяснение этому поведению есть? Кроме того что это модно
1
|
|||||||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
||
| 29.07.2019, 19:27 | ||
|
У меня личное впечатление, что в данной теме уже сейчас содержится очень много полезных знаний.
0
|
||
|
Модератор
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,095
|
|||||||
| 29.07.2019, 19:33 | |||||||
0
|
|||||||
| 29.07.2019, 19:33 | |
|
Помогаю со студенческими работами здесь
20
Не работает замыкание
Замыкание на addEvent
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|