Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   оброботка события load (https://javascript.ru/forum/misc/1809-obrobotka-sobytiya-load.html)

Dmitry A. Soshnikov 19.09.2008 22:24

Цитата:

Сообщение от ZoNT
Если есть куча элементов, которым надо навесить обработчик в цикле, значит можно этот обработчик навесить 1 раз на парент и немного откорректировать код.

это и так понятно, и все так делают, не нужно это аргументом приводить

Цитата:

Сообщение от ZoNT
for (var k = 0, l=коллекция.length; k < l; k ++) - итого 3 лишних байта.

Вероятно, у тебя length будет использоваться неоднократно, поэтому ты его выше где вынесешь (var a = 'length'; ): =)

for (var k = 0, l=коллекция[a]; k < l; k ++) - итого, даже при двух подобных циклах в коде, ты сэкономишь 5 байт =) Только тогда весь код так пиши (как я предлагал в предыдущем посте var d = document; var a = 'add'; )

Ладно, все, спор бессмысленный, завершимся на этом.

ZoNT 19.09.2008 22:29

если поищешь здесь на форуме скрипт маскированного воода, то убедишся, что я так и пишу :D

EugenyK 26.10.2008 22:43

Dmitry A. Soshnikov,
объясни пожалуйста, почему определение функции registerEvent
через скобки (function(){ ... })() будет "кэшировать" if-else и где про это можно почитать подробнее?

Dmitry A. Soshnikov 27.10.2008 00:07

EugenyK, все просто:

var f = function () {
  if (известныеДанные) {
    alert(1);
  } else {
    alert(2);
  }
};


При вызове данной функции f() всегда будет выполняться if (это очевидно).

Далее, известно, что функцию можно вызвать сразу после объявления:

(function a () { // объявляем функцию
  alert(3);
})(); // и тут же ее вызваем


Кстати, имя функции в данном случае опционально.

В JavaScript функция является объектом, ее можно вернуть, присвоить и т.д. - см. первый пример - переменной f присваивается анонимная функция, которая потом доступна для вызова через имя переменной - f(). Т.е. первый пример можно "перефразировать" так (мы делаем внешнюю оболочку из анонимной функции, которая вызывается сразу же после своего определения и возвращает другую анонимную функцию):

var f = (function () {
  return function () {
    if (известныеДанные) {
      alert(1);
    } else {
      alert(2);
    }
  }
})();


Таким образов вызов нынешней функции f() ничем не отличается от первой. Но, естественно, никакого смысла в такой перефразировке нет - мы только лишь создали дополнительное действием по вызову внешней анонимной функции. Однако, (сейчас пойдет ответ на твой вопрос :)): если мы вынесем if-else в определение внешней оболочки (при условии, что данные для проверки известны заранее и неизменны), то проверка выполнится единожды - когда функция-оболочка вызовется сразу же после определения. В проверках же нужно вернуть функции уже без проверок, - просто выполняющих свои действия:

var f = (function () {
  if (известныеДанные) {
    return function () {
      alert(1);
    };
  } else {
    return function () {
      alert(2);
    };
  }
})();


Теперь f - это либо function () {alert(1)}; либо function () {alert(2)};, и определилось это при инициализации - один раз. Сам вызов f() уже никаких проверок не делает.

EugenyK 28.10.2008 11:04

Большое спасибо! Теперь всё ясно.

alexKniaz 28.10.2008 18:03

Цитата:

100байт*1000 000 000 = 93 гига трафика в сутки!
Ну чё мелочиться??? 1 секунда ничего не даст!!!! ВЫВОД - ОПТИМИЗИРУЙТЕ РАЗМЕР!!!!


Часовой пояс GMT +3, время: 10:57.