![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Вот наткнулся примерно на такой код
Объясните пожалуйста, что он делает, и когда его удобно использовать? Это сообщение отредактировал(а) Royan - 23.9.2007, 18:51 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| dsCode |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Royan, это анонимная функция. Вызывается сразу. Если после объявления foo написать foo()(); - выведет алерт "string". В основном используется для имитации синглтона (что-то вроде, наподобие). Функцию можно вызвать один раз.
|
|||
|
||||
| Zeroglif |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Expression Statement не может начинаться с левой фигурной или с ключевого слова function. Так нельзя:
Нужно изменить Statement, не меняя смысла и результата, для этого наиболее удобным оператором является Grouping Operator (скобки вокруг выражения):
Говоря по-простому - это безымянная функция (FunctionExpression), которая тут же на месте и вызывается. Обычно такую схему применяют для инкапсуляции сокрытия идентификаторов от внешнего контекста, как правило, глобального, в процессе какой-то разовой работы (букмарклеты так запускают или либы инициализируют). В теле функции объявляются переменные и(или) функции, которые недоступны извне и затеняют одноимённые идентификаторы во внешнем(их) контексте(ах):
В вашем случае объявлена переменная foo, значением которой стала ещё одна безымянная функция. Тело этой функции роли не играет, т.к. функция дальше не вызывается, но если бы она была вызвана, допустим, через foo(), то она бы вернула ещё одну безымянную функцию (замыкание):
Больше в коде ничего интересного нет. |
||||||||
|
|||||||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Zeroglif, dsCode, понял спасибо!
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
продолжите, пожалуйста объяснение для такого скрипта. Этот скрипт вызывается из С++ ScriptExecute("здесь скрипт", "JScript" );
Сам скрипт:
Особенно непонятный для меня набор крючков по середине. Это сообщение отредактировал(а) lemax - 14.10.2007, 17:12 |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
На крючки можно не смотреть, в функцию отправляется ряд плохочитаемых аргументов, функция раскручивает их в более осмысленную строку p, строка p eval-ится в код:
Дальше смотрите этот код сами, разбирайтесь, что происходит... |
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Супер, спасибо.
|
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Любопытный пример обфускации кода, не встречал такого ранее, но бестолковый по сути, ибо во-первых тут не изменены смысловые имена переменных, а во вторых даже если бы они были изменены, то разница между этим и стандартным способом в пользу стандартного, потому что здесь код компилируется функцией eval, да еще и непосредственно в момент выполнения операции.
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 4 Всего: 8 |
Это сообщение отредактировал(а) cruelangel - 16.11.2007, 21:50 |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |