Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет mumuntu ([info]mumuntu)
@ 2010-08-05 23:00:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Я, когда пишу такое,
for( j = 0 ; j < L ; j++ ){
    var callback = function(m) {
        return function(data) {
            $tab = $(f(m, data));
            ...
        }
    } (x[j]);
    y(x[j].k, callback);
}

с одной стороны, понимаю, что это офигенно красиво, но процентов 60-70 людей в команде этот код просто не поймут, я этот прием сам обнаружил в сети, как некий паттерн.
С другой стороны, никаких других вариантов сделать асинхронную обработку сгруппированных запросов к серверу у меня сейчас нет. Как я понимаю, асинхронная обработка - сама по себе довольно сложная для понимания вещь.
Какой-то комментарий к этому коду я написал и дал ссылку на место, где этот шаблон объясняется.
Но все равно думаю, не слишком ли много зеленого чая я пью? это фундаментальная сложность, или можно как-то проще изложить?


(Читать комментарии) - (Добавить комментарий)


[info]max630@lj
2010-08-05 15:57 (ссылка)
а матрёшка из функций - это такой способ скопировать состояние мутирующей переменой?

так не проканает?

var m = x[j];
... function (data) { ... m .... } ....

(Ответить) (Ветвь дискуссии)


[info]alexclear@lj
2010-08-05 15:58 (ссылка)
> а матрёшка из функций - это такой способ скопировать состояние мутирующей переменой?

Именно, через скоп вспомогательной функции.

> var m = x[j];
> ... function (data) { ... m .... } ....

Не, так не работает.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]juan_gandhi@lj
2010-08-05 16:17 (ссылка)
О, новое русское слово узнал. "Скоп". Спасибо.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexclear@lj
2010-08-05 16:21 (ссылка)
Я сегодня на полном серьезе спрашивал у коллег, как сказать по-русски "багфиксинг".
Сошлись на "устранении ошибок".

(Ответить) (Уровень выше)


[info]intr13@lj
2010-08-05 21:44 (ссылка)
Хмм, я не большой специалист по замыканиям в javascript, но все же любопытно, почему не работает:

> var m = x[j];
> ... function (data) { ... m .... } ....

получается javascript каждый раз не создает новую переменную "m"? А для всего блока for(...){...} имеет общий скоп описанных переменных? Или это некий другой эффект, например ленивое вычисление значения переменной "m"?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]rainman_rocks@lj
2010-08-12 10:51 (ссылка)
Кложуры в жабоскрипте - очень незамутнённые ребята. Они не забирают с собой родительские переменные индивидуально, как в питоне. Они хватают ссылку на весь родительский скоп и уносят его с собой. Поэтому когда следующая итерация попортит переменную "m", коллбэки, созданные на предыдущих, загрустят.

Так и живём.

(Ответить) (Уровень выше)


(Читать комментарии) -