Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.08.2019, 13:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Devero97,
как это работет понятно ?
let count = 0;
 function plus(){
  console.log(count++);
 }

это яблоко!!!
а ниже это сад по производству таких яблок
function makeCounter(){
 let count = 0;
 return function(){
  console.log(count++);
 }
}

а это создание нового яблока
makeCounter();
чтобы не писать каждый раз
let count = 0;
 function plus(){
  console.log(count++);
 }

1. образец функции.
2. фабрика функций.
3. экземпляр функции.
Ответить с цитированием
  #12 (permalink)  
Старый 04.08.2019, 15:20
Интересующийся
Отправить личное сообщение для NiOl Посмотреть профиль Найти все сообщения от NiOl
 
Регистрация: 11.06.2017
Сообщений: 15

Хм... до прочтения этой темы я даже не слышал такого слова "замыкание"... Думаю, что название совершенно не передает смысл этой технологии, если я вообще правильно ее понял ))

Попытаюсь Devero97, объяснить "замыкание", насколько его понял я.

Допустим, мы пишем функцию, которая должна возвращать некие данные, которые зависят от своих предыдущих значений. В Вашем примере это счетчик. Понятно, что если значение счетчика разместить внутри функции, т.е. сделать его локальным, то счетчик просуществует только пока функция выполняется, после чего его значение будет потеряно. Тогда логично поместить счетчик в глобальной переменной (я так и делал) и тогда его значение не будет потеряно, но как только код станет большим, начнутся проблемы - лишняя глобальная переменная требует дополнительного описания, что бы самому вспомнить, для чего она и откуда вызывается. Еще хуже, когда Вы будете переносить "отлаженную" функцию в другой код, Вы запросто забудете перетащить с собой и глобальную переменную. Вдобавок мы можем сделать еще одну функцию, которая тоже использует глобальную переменную, да и с тем же именем... есть и другие проблемы.

Теперь про хитрость: В примере получена глобальная функция, которая на самом деле является дочерней для другой функции. Будучи дочерней функцией, она должна иметь доступ ко всем данным родительской функции, как они были на момент описания дочерней функции. Поэтому все данные удерживаются в памяти (надеюсь, только используемые), как буд-то родительская фукция все еще выполняется. Но эти данные родительской функции уже не нужны, т.к. ее выполнение уже закончилось, поэтому дочерняя функция получает их независимую копию, которые хранятся как глобальные, но доступны только этому экземпляру дочерней функции, как локальные, и не перескаются с данными других копий этой же дочерней функции.
Ответить с цитированием
  #13 (permalink)  
Старый 04.08.2019, 15:51
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони,
вот тут нет левого сайтбара с навигацией по статье: https://learn.javascript.ru/attribut...tom-properties
и в содержании учебника этой статьи нет. Зато в гугле есть.
Ответить с цитированием
  #14 (permalink)  
Старый 04.08.2019, 17:07
Интересующийся
Отправить личное сообщение для Devero97 Посмотреть профиль Найти все сообщения от Devero97
 
Регистрация: 03.08.2019
Сообщений: 17

NiOl,
рони, уже объяснил то, что эти внешние переменные, доступные по ссылке на лексическое окружение внешней функции сохраняются в лексическом окружении вызываемой функции и таким образом происходит запоминание и изменение числа. Вроде бы нет вопросов больше.
Ответить с цитированием
  #15 (permalink)  
Старый 04.08.2019, 17:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

MC-XOBAHCK,
учебник редактируют, ссылка на новую редакцию темы: атрибуты, тут
https://learn.javascript.ru/dom-attr...and-properties
Цитата:
Если что-то не так - пожалуйста, поправьте в PR на GitHub (ссылка на редактирование слева в сайдбаре статьи). Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jquery touch events все срабатывает в один момент falkone Events/DOM/Window 6 01.09.2015 15:36