Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #81 (permalink)  
Старый 18.04.2009, 16:16
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

2 Zeroglif >
Я не то, чтобы 'упорно', просто не вижу ,как иначе (мои изучения стандарта не дали другого понимания).
Кстати, язык мой был бы птичьим, если бы я специально не вводил определения, а поскольку все определено(частично собственные понятия, частично из спецификации), то он уже понятен.
Объясните тогда этот вопрос так, как Вы считаете нужным его объяснять :
Когда Программа может менять слоты [[Scope]]'a' Замыкания (основная проблема анализа Замыканий) ?
Возможно Вы можете сделать это гораздо проще и яснее, чем я , повторяю, я пока не вижу как проще и яснее.

Последний раз редактировалось kefi, 18.04.2009 в 16:24.
Ответить с цитированием
  #82 (permalink)  
Старый 18.04.2009, 16:52
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от kefi
Когда Программа может менять слоты [[Scope]]'a' Замыкания (основная проблема анализа Замыканий) ?
Не движемся вперёд никак. Scope (scope chain) - это принадлежность контекста исполнения, список объектов, где ищется идентификатор. [[Scope]] - это принадлежность функции, "закладка" на объекты, которые войдут в будущем (при исполнении) в состав Scope контекста исполнения данной функции.

[[Scope]] статичное свойство, появляется при создании функции и далее уже не меняется в отличие от Scope, меняющейся при каждом вызове. То, что вы называете слотами [[Scope]] - это объекты, ни программа, ни программист не меняют эти "слоты", они лексически "заморожены" специально. Вызывая 100 раз функцию из любого места, вы носите с собой одно и то же значение [[Scope]], добавляя в момент вызова новый VO, что в итоге и формирует scope chain...
Ответить с цитированием
  #83 (permalink)  
Старый 18.04.2009, 17:08
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

2 Zeroglif >
[qoute]
ни программа, ни программист не меняют эти "слоты", они лексически "заморожены" специально. [/quote]
Ну т.е. Вы хотите сказать, что слоты [[Scope]] создаются один раз и навсегда " при создании функции ".
Правда не очень понятно, что имеется ввиду под " при создании функции " ?
Но ладно , не суть, по мне так хоть бы и менялись эти слоты , все равно вопрос останется таким же
Я сам-то имел ввиду то, что ЗНАЧЕНИЯ этих слотов меняются. И вопрос следовательно , если считать , что сами слоты создаются один раз и навсегда будет звучать так :
Когда Программа может менять Значения слотов Скопа Замыкания (основная проблема анализа Замыканий) ?
Ответить с цитированием
  #84 (permalink)  
Старый 18.04.2009, 17:18
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от kefi
До этих Ваших слов (что я выделил ) мне было все ясно. Но вот они действительно меня запутывают. Мне так хорошо все понималось, когда я считал , что замыкание это процесс присвоения ссылки на FE (myScope = C) переменной или ,точнее , просто использование имени Замыкаемой функции в выражении, и саму такую переменную-ссылку я тоже называл Замыканием.
Я ж вам давал выше ссылку на топик про замыкания. Прочтите его ещё раз, тогда отпадёт надобность выдумывать причудливые названия и приписывать им такую же функциональность и поведение.

Про примеры, вроде, мы тоже договорились, - что Вы, если хотите понять, приводите простой пример (максимум в 5-10 строк), не переполненный комментариями, переменными, [[Выдуманными Объектами В Двойных Квадратных Скобках]] и т.д.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #85 (permalink)  
Старый 18.04.2009, 17:27
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Цитата:
тогда отпадёт
читал я и его и стандарты - не объясняют они того, что я изложил и ответа на несколько раз поставленный вопрос тоже не дают.
про примеры, Вы посмотрите некоторые свои посты - они гораздо длиннее, ну и что, я Вам благодарен за подобное объяснения, то , что у меня засунуто все объяснение в один пример, так ну и что ? Я Вам уже сказал, что там нет ничего лишнего.
А уж про причудливые названия - 'Замыкание' - не мной придумано, а уж более причудливого я не встречал термина ...
попробуй по нему определи, что тут имелось ввиду...

Последний раз редактировалось kefi, 18.04.2009 в 17:31.
Ответить с цитированием
  #86 (permalink)  
Старый 18.04.2009, 17:32
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от kefi
Когда
Когда угодно, если есть доступ непосредственно к объекту. Пример:

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' и глубже. Это базовый принцип - объект уникален, ссылок на него может быть много...

Последний раз редактировалось Zeroglif, 18.04.2009 в 17:36.
Ответить с цитированием
  #87 (permalink)  
Старый 18.04.2009, 17:41
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Пример:

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".

Сообщение от kefi
ответа на несколько раз поставленный вопрос тоже не дают
Дело в вопросе. Уверен, после примеров неясности отпадут (ну, или, во всяком случае, их станет меньше).

update: а, уже выше есть пример.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 18.04.2009 в 17:45.
Ответить с цитированием
  #88 (permalink)  
Старый 18.04.2009, 18:11
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Цитата:
Уверен, после примеров неясности отпадут
Я уже вроде как говорил, даже не раз, что неясностей в том смысле, что вы представляете у меня нет.
Дело в том , чтобы изложить то, что я изложил более ясно и кратко без примеров или чтобы был один универсальный пример. Что я и пытался.
Вот Zeroglif отвечает на поставленый вопрос :
Когда угодно, если есть доступ непосредственно к объекту А что это значит ?... Только не надо отвечать, я после того, что написал, понимаю это. Но если бы увидел это впервые , то не понял.


Цитата:
Кстати, обратите ещё раз на то, что такое замыкание (например, на b()()). Обратите, закрепите, и не надо больше приравнивать это лишь к "переменной-ссылке на FE".
Да я не только к переменной ссылке приравнивал, просто с присвоением имени функции переменной ссылке становятся более просты объяснения.
Остальное все нюансы. Например, я так скорректировал бы свое понимание :
Установить Замыкание -
значит использовать Имя Замыкаемой функции или ссылку на нее
в выражении (возможно опосредованно через его вычисление). Частным случаем является присвоение с помощью FE ссылки на Замыкаемую функцию переменной.
Ответить с цитированием
  #89 (permalink)  
Старый 18.04.2009, 18:20
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от kefi
Я уже вроде как говорил, даже не раз, что неясностей в том смысле, что вы представляете у меня нет.
Ну, конечно, мы тут все слепые...
Ответить с цитированием
  #90 (permalink)  
Старый 18.04.2009, 18:28
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Цитата:
Ну, конечно, мы тут все слепые...
так если не слепые, то зачем себя вести, как слепые ?
Ответить с цитированием
Ответ



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

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