2 Zeroglif >
Я не то, чтобы 'упорно', просто не вижу ,как иначе (мои изучения стандарта не дали другого понимания). Кстати, язык мой был бы птичьим, если бы я специально не вводил определения, а поскольку все определено(частично собственные понятия, частично из спецификации), то он уже понятен. Объясните тогда этот вопрос так, как Вы считаете нужным его объяснять : Когда Программа может менять слоты [[Scope]]'a' Замыкания (основная проблема анализа Замыканий) ? Возможно Вы можете сделать это гораздо проще и яснее, чем я , повторяю, я пока не вижу как проще и яснее. |
Цитата:
[[Scope]] статичное свойство, появляется при создании функции и далее уже не меняется в отличие от Scope, меняющейся при каждом вызове. То, что вы называете слотами [[Scope]] - это объекты, ни программа, ни программист не меняют эти "слоты", они лексически "заморожены" специально. Вызывая 100 раз функцию из любого места, вы носите с собой одно и то же значение [[Scope]], добавляя в момент вызова новый VO, что в итоге и формирует scope chain... |
2 Zeroglif >
[qoute] ни программа, ни программист не меняют эти "слоты", они лексически "заморожены" специально. [/quote] Ну т.е. Вы хотите сказать, что слоты [[Scope]] создаются один раз и навсегда " при создании функции ". Правда не очень понятно, что имеется ввиду под " при создании функции " ? Но ладно , не суть, по мне так хоть бы и менялись эти слоты , все равно вопрос останется таким же Я сам-то имел ввиду то, что ЗНАЧЕНИЯ этих слотов меняются. И вопрос следовательно , если считать , что сами слоты создаются один раз и навсегда будет звучать так : Когда Программа может менять Значения слотов Скопа Замыкания (основная проблема анализа Замыканий) ? |
Цитата:
Про примеры, вроде, мы тоже договорились, - что Вы, если хотите понять, приводите простой пример (максимум в 5-10 строк), не переполненный комментариями, переменными, [[Выдуманными Объектами В Двойных Квадратных Скобках]] и т.д. |
Цитата:
про примеры, Вы посмотрите некоторые свои посты - они гораздо длиннее, ну и что, я Вам благодарен за подобное объяснения, то , что у меня засунуто все объяснение в один пример, так ну и что ? Я Вам уже сказал, что там нет ничего лишнего. А уж про причудливые названия - 'Замыкание' - не мной придумано, а уж более причудливого я не встречал термина ... попробуй по нему определи, что тут имелось ввиду... |
Цитата:
var b, c; function A(x) { b = function () { alert(x); }; c = function () { ++x; }; b(); //-> 1 // поменяем значение 'x' x = 9; } A(1); b(); //-> 9 // поменяем значение 'x' c(); b(); //-> 10 При создании функции 'b' в [[Scope]] будет навсегда "вшит" объект переменных функции 'A'. Изнутри функции 'b' мы cможем обратиться к именам, связь для которых будет найдена в объекте переменных функции 'A', в примере это имя 'x'. НО! не только функция 'b' может работать с объектом переменных функции 'A', но и сама функция 'A' (что очевидно) и любая другая функция, созданная в 'A' и глубже. Это базовый принцип - объект уникален, ссылок на него может быть много... |
Пример:
var a = 10; function b() { var c = 20; function d() { var e = 30; alert([a, c, e, f]); f++; e++; } eval('var f = 40;'); d(); c++; return d; } b()(); Видно, что "e++" не имеет смысла, т.к. "e" определяется каждый раз в VO(d), однако, "f++", "c++" "eval('var f = 40;');" - воздействуют на VO(b), и, второй вызов "d" (через b()()) даёт это понять. Кстати, обратите ещё раз на то, что такое замыкание (например, на b()()). Обратите, закрепите, и не надо больше приравнивать это лишь к "переменной-ссылке на FE". Цитата:
update: а, уже выше есть пример. |
Цитата:
Дело в том , чтобы изложить то, что я изложил более ясно и кратко без примеров или чтобы был один универсальный пример. Что я и пытался. Вот Zeroglif отвечает на поставленый вопрос : Когда угодно, если есть доступ непосредственно к объекту А что это значит ?... Только не надо отвечать, я после того, что написал, понимаю это. Но если бы увидел это впервые , то не понял. Цитата:
Остальное все нюансы. Например, я так скорректировал бы свое понимание : Установить Замыкание - значит использовать Имя Замыкаемой функции или ссылку на нее в выражении (возможно опосредованно через его вычисление). Частным случаем является присвоение с помощью FE ссылки на Замыкаемую функцию переменной. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 22:25. |