Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.09.2016, 21:38
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

Размышления о замыканиях
Здравствуйте.
Прочитал несколько небольших статей про замыкания и чтобы понять попытался формализовать как-то, чтобы именно понимать, а не просто "привыкнуть". Вот что у меня получилось:
при объявлении функций, переменных они укладываются в дерево корень которого window. получается ищем переменную в текущем узле, если не нашли, то поднимаемся вверх по дереву до window. на одном уровне переменные не видны, только вверх.
а вот все свойства заносятся в хэш-таблицу(может цифровое дерево, например), которая видна глобально.
может что-то не укладывается в эту "концепцию"?
а может кто-нибудь реальной информацией владеет и "копал" исходные коды?
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2016, 22:26
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

там происходит примерно то же самое, что при наследовании объектов. Каждое последующее окружение наследует от предыдущего. На уровне интерпретатора реализован лукап, который занимается поиском переменных. Дерева там нет, это однонаправленная ссылочная структура.

Вообще, сейчас наблюдается тенденция преувеличивать роль замыканий в языках, это далеко не самая лучшая и мощная вещь. Фактически, частный случай ООП, сильно кастрированный, не более того
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2016, 23:17
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

Сообщение от scrollquest Посмотреть сообщение
. На уровне интерпретатора реализован лукап, который занимается поиском переменных. Дерева там нет, это однонаправленная ссылочная структура.
лукап это же массив??
а это ~x или O(x)... чего-то я сомневаюсь очень, а если это игра?
с линейной сложностью поиска, например? так еще и память, не факт, что непрерывным куском выделяется? так еще и сборщик мусора, который будет дыры в массиве оставлять?(для хэш-таблиц дыры только упростят все)

добавил я свойство
function.attribute = 1;

по-вашему, атрибут добавляется в конец массива и когда мне следующей командой надо к нему обратиться, то я должен пройти весь массив, а если кол-во обращений 1000, а количество атрибутов 100?
сложность 10x^2
что-то я сильно сомневаюсь...
не быстрее ли двинуть битовой операцией имя и получить таким образом индекс массива, где хранится атрибут? сложность - полтакта, условно говоря. и вставка такая же.
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2016, 23:54
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

Сообщение от Ostic
лукап это же массив??
Нет, лукап -- это функция, которая производит поиск, в данном случае переменных
Ответить с цитированием
  #5 (permalink)  
Старый 08.09.2016, 09:52
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Ostic
они укладываются в дерево корень
Какое дерево? Жабаскрипт - интерпретатор. Текст у тебя, а не дерево. Доходит до текста - компилит все что "видно", уходит из текста - забывает. Чтобы не забывало переменные должны быть в том тексте, до которого look - доходит всегда - up. Из-за чего были придуманы такие чудесные обходы как .bind()

Почему кложа - замыкание я метафоры тоже не понял. Кложа - затычка, чопик.
Ответить с цитированием
  #6 (permalink)  
Старый 08.09.2016, 09:54
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Ostic
Прочитал несколько небольших статей про замыкания
...
"копал" исходные коды?
Все с тобой ясно, целкодрочер. )))
Ответить с цитированием
  #7 (permalink)  
Старый 08.09.2016, 16:44
Аспирант
Отправить личное сообщение для moron Посмотреть профиль Найти все сообщения от moron
 
Регистрация: 29.07.2012
Сообщений: 49

Не совсем понимаю автора. Чтобы понять замыкание необходимо понять, что у функцией есть scope и формируется он при создании функции. Отсюда возможны замыкания:
function carryAdd(a, b){
  //анонимная функция при своем создании
  //знает значение a и замыкает его.
  //поэтому переменная a доступна внутри :c
  return function(b){
    return a+b
  }
}
foo = carryAdd(5);
foo(10)// 15
foo(5)//10

С помощью замыканий можно реализовать инкапсулирование переменных. Т.е когда переменная находится внутри обьекта, а доступ и изменение осуществляется с помощью геттеров\сеттеров

Последний раз редактировалось moron, 08.09.2016 в 16:46.
Ответить с цитированием
  #8 (permalink)  
Старый 09.09.2016, 20:27
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

Сообщение от scrollquest Посмотреть сообщение
Нет, лукап -- это функция, которая производит поиск, в данном случае переменных
в вики российском почитал.
я знаю деревья и хэш-таблицы, вставка в которые и поиск занимают
lg(n), например.

надо смотреть что там за структуры() и тогда понятно станет как замыкания понимать. причем разные (у js же есть даже jit-compilier).
вы думаете там нет таблиц посика? Нет...
потом новые Map, Set...
Сообщение от scrollquest Посмотреть сообщение
там происходит примерно то же самое, что при наследовании объектов. Каждое последующее окружение наследует от предыдущего. На уровне интерпретатора реализован лукап, который занимается поиском переменных. Дерева там нет, это однонаправленная ссылочная структура.
Сообщение от scrollquest Посмотреть сообщение
Какое дерево? Жабаскрипт - интерпретатор. Текст у тебя, а не дерево. Доходит до текста - компилит все что "видно", уходит из текста - забывает. Чтобы не забывало переменные должны быть в том тексте, до которого look - доходит всегда - up. Из-за чего были придуманы такие чудесные обходы как .bind()
а объекты как организованы, как организован поиск? я видимо в других категориях мыслю - я не знаю лукап (это какая-нибудь фирма придумала, для внутреннего пользования или это какой-то хоть страны или фирмы стандарт?)
чего, вы как-то пренебрижительно отнеслись ИМХО
нифига себе javascript интерпретатор или компилятор!?
Сообщение от moron Посмотреть сообщение
Не совсем понимаю автора. Чтобы понять замыкание необходимо понять, что у функцией есть scope и формируется он при создании функции. Отсюда возможны замыкания:
так есть оказывается строгий синтаксис - сильно полегчало ))
одно и тоже объяснял.
я думал кто скажет так, обзорно.
Ответить с цитированием
  #9 (permalink)  
Старый 09.09.2016, 20:36
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

вы посмотрите, как даже DOM организован - "дерево" - модель в виде дерева )), а то , что вам так его в отладчике показывают не факт что именно так все - это просто вьюха.
Ответить с цитированием
  #10 (permalink)  
Старый 09.09.2016, 20:53
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

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

Последний раз редактировалось Ostic, 09.09.2016 в 20:56.
Ответить с цитированием
Ответ



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

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