Цитата:
Цитата:
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, время: 19:06. |