![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Innuendo108 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Прочитал недавно про замыкания, узнал про одно из его свойств - инкапсуляция.
Есть задача, обработать строку. Упростим задачу до обрамление строки символами решетки. Следующий код работает:
Однако настоящая задача по-сложнее, и там необходима рекурсия. Допустим обрамлять надо всю строку, а так же выражения в скобках. т.е. "qu(test)qu" вернет "#qu(#test#)qu#"; тут я решил делать для каждого преобразования свой экземпляр объекта.. но такой код:
не работает. Я так понимаю, я не правильно использую это, или как? Это сообщение отредактировал(а) Innuendo108 - 6.6.2010, 07:59 |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Innuendo108, замыкание - это просто такая фенечка нетривиальная в JS. Проявляется она когда одна функция описывается в теле другой. При этом внутренней функции становятся доступны все внутренние переменные внешней, даже если эта внутренняя функция вызывается совсем даже непонятно где и непонятно когда ;) Это если совсем уж на пальцах объяснять.
В этом примере достаточно было не конструировать "функцию с непосредственным вызовом", а ограничится функцией просто. Каждый вызов такой функции порождал бы новый объект... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
ksnk,
да, замыкание в основном основывается на вызове функции в теле другой. Это нужно, к примеру, для назначения событий элементам в цикле (с переменным аргументом). Но так же используют и просто в виде var f = (func(){})(); Я чисто вижу такую конструкцию в пользовательских скриптах .user.js и скриптах из расширений к браузеру.... Это делают для инкапсуляции. Мне именно для пользовательского скрипта и нужно... Поправьте если я не прав, мне желательно использовать такую конструкцию? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
такую конструкцию используют, как правило, чтобы локальные переменные, описанные в скипте, не пересекались с другими переменными из других скриптов. Обычно, такие скобки просто окружают все тело скрипта.
если написать , например так
Это сообщение отредактировал(а) ksnk - 6.6.2010, 11:08 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
ок, понял. Вот так и обрамлю.. целиком весь скрипт тогда и обрамлю
|
|||
|
||||
InfMag |
|
||||||||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: 2 Всего: 4 |
Вот пара способов как правильно создать объект (p.s. JS чувствителен к регистру)
Хотя если быть честным - можно создать как угодно, ибо в JS всё - объекты. по поводу f = (func(){})(); - f в итоге это не функция, а её результат var STR = (function(){return "text"})() вернёт строку с text
|
||||||||
|
|||||||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |