![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif, скачал "Функциональное программирование".djvu. А что за расширение и как к нему "подобраться"?
|
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
http://windjview.sourceforge.net/
Имхо, с одной стороны, нет принципиальной разницы в том, вернули функцию или она просто работает внутри. Всё тот же доступ к scope chain. Но с другой стороны, наибольший (наглядный) смысл "замыкания" приобретают именно после выхода из объемлющей функции, когда вложенная функция продолжает жить (может и не одна, а несколько под каждый вызов с разными значениями), переживая своё лексическое окружение. Поэтому D.Cornford связывает появление замыкания именно с жизнью после смерти:
|
||||
|
|||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
AKS, насколько я понимаю, это некий open-source'ный аналог PDF. Вот навскидку нашел 2 читалки: отдельная и плагин для браузера...
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| AKS |
|
||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
О, скачал WinDjView! Тольк читать страшно - "SECD-машина, ленивая SECD-машина". ;)
Zeroglif,
Очередной трюк. Почему переменная не получает атрибут { DontDelete }? Добавлено @ 20:00 Zeroglif, вот это да! Я и не знал, что eval такой "коварный" - можно даже функцию удалить:
Это сообщение отредактировал(а) AKS - 19.11.2006, 20:01 |
||||
|
|||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif, с этим eval (evil as D.Crockford sad) надо бы разобраться:
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
А относительно замыканий - их более точный перевод для западного читателя тогда - зомбированные функции, а для нашего - дубли по Стругацким. |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Потому что в первом случае переменная, а во втором - свободный идентификатор, который позже станет свойством global object, т.к. никому не принадлежит изначально. Все переменные в процессе конкретизации становятся свойствами определённого variable object с аттрибутом DontDelete (ECMAScript 10.2). Для кода eval при конкретизации переменных аттрибут DontDelete не задаётся (ECMAScript 10.2.2). Чей-то своевольный замысел... |
|||
|
||||
| 12345c |
|
||||||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Пример 2 - попытаемся удалить глобальную переменную, чтобы как-то зазомбировать на её значение.
(Ещё вопрос, никто не знает, чем перловые замыкания отличаются от JS?) Это сообщение отредактировал(а) 12345c - 20.11.2006, 02:06 |
||||||||
|
|||||||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
А чем простая функция отличается от "зомби"? Что первая, что вторая не знают есть переменная или нет, они только держат цепочку объектов, которую им нужно обойти, чтобы найти определённый идентификатор. А "с" условно говоря никогда и не было, есть только scope chain, функция деталей (имён, значений) не видит. Например, локальной переменной в момент определений вложенной функции и в момент её вызова изнутри может вообще не существовать.
|
||||
|
|||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Богат русский язык на обороты. Если будет удалена переменная, то замыкание само собой её не найдёт, т.к. не найдёт свойства с таким именем в scope chain, никаких значений оно не запоминает. Нормальное поведение. По сему тут нужно или вставлять в scope chain дополнительный объект или передавать значение переменной во вложенную функцию, или создавать некое свойство в функции и работать уже с ним. В общем без переделки не обойтись. Например, так:
|
||||
|
|||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif,
Ну вот, обломался я. Думал с утра в "следопыты" опять подамся, начну очередное "мини-исследование" с eval. А оказывается все давно "черным по белому"... Вообще, логично все получается - нельзя в момент экзекуции установить какие-либо внутрение атрибуты. |
|||
|
||||
| rene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
Попробывал изобразить "closure":
Это сообщение отредактировал(а) rene - 21.11.2006, 20:08 Присоединённый файл ( Кол-во скачиваний: 26 )
closure.jpg 23,84 Kb |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Наглядно. А в какой программе можно быстро и удобно строить такие схемы как эти: http://billhails.net/Book/closure-captures-env-n.png http://billhails.net/Book/closure-extends-env-n.png кстати, это замыкание, так что не оффтоп |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Zeroglif, а у меня наверное оффтоп, но очень-очень близкий: как по-русски можно грамотнее всего "обозвать" Scope chains?
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
SelenIT, а я тут по-быстрому выскажусь, пока вы все спите ;)...
Как грамотнее - незнаю, а вот если "чисто" по-русски "обозвать", то могу вот так попробовать: Scope chain - ряд необходимых (видимых) объектов для исполняемой процедуры. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |