Цитата:
Цитата:
for (var k = 0, l=коллекция[a]; k < l; k ++) - итого, даже при двух подобных циклах в коде, ты сэкономишь 5 байт =) Только тогда весь код так пиши (как я предлагал в предыдущем посте var d = document; var a = 'add'; ) Ладно, все, спор бессмысленный, завершимся на этом. |
если поищешь здесь на форуме скрипт маскированного воода, то убедишся, что я так и пишу :D
|
Dmitry A. Soshnikov,
объясни пожалуйста, почему определение функции registerEvent через скобки (function(){ ... })() будет "кэшировать" if-else и где про это можно почитать подробнее? |
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() уже никаких проверок не делает. |
Большое спасибо! Теперь всё ясно.
|
Цитата:
|
Часовой пояс GMT +3, время: 08:20. |